9iDBMS_STATS包收集統計信息
2024-07-21 02:35:24
供稿:網友
作者: Builder.com
在9i中,Oracle增強了SQL的基于開銷的優化器(CBO),從而在決定SQL語句的最優執行計劃時采用I/O和CPU使用率統計信息。
Oracle使用新的Oracle9i DBMS_STATS包來收集這些信息。然而,這個包的功能非常有限,而且因為大多數系統有多種操作模式,所以說在考慮Oracle收集系統統計信息的時候你必須格外小心。
典型地,假如選擇使用DBMS_STATS,最好的辦法是在數據庫進行某種類型的處理時進行采樣。例如,假設我們有一個白天運行于OLTP模式下而晚上運行于決策支持系統(DSS)模式下的數據庫。
在下面的例子中,白天Oracle在運行于OLTP模式下時收集統計信息;而在晚上,Oracle在運行批處理操作時收集統計信息。
-- Create the table to hold the stats
dbms_Stats.Create_Stat_Table (
ownname => 'PROD',
stattab => 'dbastats',
tblspace => 'perfstat');
-- Run during the day; gather stats for when the system is in OLTP mode
BEGIN
dbms_Stats.Gather_System_Stats(
interval => 300,
stattab => 'dbastats',
statid => 'OLTP');
END;
/
-- Start at night to gather stats during batch Operations
BEGIN
Dbms_Stats.Gather_System_Stats(
interval => 300,
stattab => 'mystats',
statid => 'DSS');
END;
/
在已經收集了系統統計信息的采樣之后,我們就可以在系統改變處理模式的時候動態地切換系統統計。
execdbms_stats.import_system_stats('dbastats','OLTP');
exec dbms_stats.import_system_stats('dbastats','BATCH');
當然,這個特性對于雙峰Oracle數據庫來說是很基本的,因為對于這種數據庫的處理特點變化很大。而對于查詢模式恒定的均勻型數據庫來說,這個特性與你自己的查詢執行計劃區別不大。
---------------------------------------------------
本文作者: Donald Burleson是有23年經驗的數據庫治理員,他出版過14本數據庫專著,發表論文達100多篇。Donald Burleson是Oracle Internals的主編和Burleson Oracle Consulting的總裁。