如何定期更新Oracle收集的统计信息

avatar
作者
猴君
阅读量:0

要定期更新Oracle收集的统计信息,您可以使用数据库中的DBMS_STATS包

  1. 创建一个存储过程来收集统计信息:
CREATE OR REPLACE PROCEDURE collect_stats AS BEGIN    -- 收集表统计信息    DBMS_STATS.GATHER_TABLE_STATS(ownname => NULL, tabname => NULL, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);        -- 收集索引统计信息    DBMS_STATS.GATHER_INDEX_STATS(ownname => NULL, indname => NULL, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO');        -- 收集系统统计信息    DBMS_STATS.GATHER_SYSTEM_STATS; END; / 
  1. 创建一个作业(JOB)来定期运行存储过程:
DECLARE    job_id NUMBER; BEGIN    DBMS_JOB.SUBMIT(job_id, 'BEGIN collect_stats; END;', SYSDATE, 'sysdate + 7');    COMMIT; END; / 

在这个例子中,我们创建了一个名为collect_stats的存储过程,它会收集表、索引和系统统计信息。然后,我们创建了一个作业,每隔7天运行一次该存储过程。

注意:这个例子是基于Oracle 11g或更高版本的。如果您使用的是较旧的版本,可能需要使用DBMS_JOB包代替DBMS_SCHEDULER包来创建作业。

  1. 如果需要,您可以监控作业的执行情况:
SELECT * FROM USER_JOBS WHERE JOB = job_id; 

job_id替换为实际的作业ID。

通过这种方式,您可以确保Oracle数据库定期更新统计信息,从而提高查询性能。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!