阅读量:0
要定期更新Oracle收集的统计信息,您可以使用数据库中的DBMS_STATS包
- 创建一个存储过程来收集统计信息:
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; /
- 创建一个作业(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数据库定期更新统计信息,从而提高查询性能。