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

   2024-09-30 6860
核心提示:要定期更新Oracle收集的统计信息,您可以使用数据库中的DBMS_STATS包创建一个存储过程来收集统计信息:CREATE OR REPLACE PR

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

创建一个存储过程来收集统计信息:
CREATE OR REPLACE PROCEDURE collect_stats ASBEGIN   -- 收集表统计信息   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;/
创建一个作业(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包来创建作业。

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

job_id替换为实际的作业ID。

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

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号