要定期更新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;
/
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數據庫定期更新統計信息,從而提高查詢性能。