aux_stats$ 基表(系統統計信息)
aux_stats$ 基表(系統統計信息)
查看操作系統統計信息
col sname for a20
col pname for a20
col pval2 for a40
select * from sys.aux_stats$;
SNAME PNAME PVAL1 PVAL2
-------------------- -------------------- ---------- ----------------------------------------
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 08-24-2013 12:04
SYSSTATS_INFO DSTOP 08-24-2013 12:04
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 3074.07407
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETH
aux_stats$是sys管理員用戶下的一個基表后綴為$,必須寫schema才能查詢到,所謂的基表就是給動態性能視圖提供數據的原始表,
由于基表非常重要,oracle規定不允許直接訪問和修改基表,如果你比較了解這些那么另說了。
這個表中記錄了“操作系統統計信息”。Oracle會利用操作系統統計信息來修正執行計劃的代價,也就是說這些信息是影響代價計算的因素之一。
注意:如果oracle收集了操作系統統計信息,那么CBO采用工作量統計模式計算代價
如果oracle沒有收集操作系統統計信息,那么CBO采用非工作量統計模式計算代價,
看上面MBRC沒有參數值就說明還沒有收集操作系統統計信息。
這兩個模式計算代價的公式是不同的。
列含義:
SQL> desc sys.aux_stats$
Name Null? Type
------------------------ -------- ----------------------------------------------------------------------------
SNAME NOT NULL VARCHAR2(30)
PNAME NOT NULL VARCHAR2(30)
PVAL1 NUMBER
PVAL2 VARCHAR2(255)
SNAME:是指操作系統統計信息
PNAME:parameter name 參數名
PVAL1:參數值
PVAL2:參數值
參數解釋
FLAGS:標志
CPUSPEEDNW:非工作量統計模式下CPU主頻,直接來自硬件
IOSEEKTIM:IO尋址時間(毫秒),直接來自硬件
IOTFRSPEED:IO傳輸速率(字節/毫秒)
SREADTIM:讀取單個數據塊的平均時間
MREADTIM:讀取多個數據塊的平均時間
CPUSPEED:工作量統計模式下CPU主頻,根據當前工作量評估出一個合理值
MBRC:oracle收集完統計信息后評估出的一次多塊讀可以讀幾個數據塊db_file_multiblock_read_count
MAXTHR:最大IO吞吐量(字節/秒)
SLAVETHR:平均IO吞吐量(字節/秒)
后面這6個參數是在oracle收集完統計信息后才能得出的參數值,有什么用呢?
CBO在計算SQL語句的代價時,需要使用數據庫對象例如表 索引 等對象統計數據,
還要使用操作系統統計數據例如CPU周期 IO速度 數據塊讀時間等,選擇花費時間最少的執行計劃為最佳執行計劃。
Oracle使用dbms_stats.gather_system_stats存儲過程來收集操作系統統計信息,收集來的數據存放在sys.aux_stats$表中,
如果我們做了收集操作那么會有統計數據,如果沒有做就沒有統計數據,這兩種計算代價的方法是不同的。
收集系統的統計信息:
dbms_stats.gather_system_stats語法
execute dbms_stats.gather_system_stats(
gathering_mode varchar2 default 'noworkload'
interval integer default null,
stattab varchar2 default null,
statid varchar2 default null,
statown varchar2 default null);
解釋
gathering_mode 參數,默認值“noworkload”,還可以設置為“workload”含義
noworkload:非工作量統計模式,收集上來的數據都是來自硬件
workload:工作量統計模式,收集上來的數據需要在特定的數據庫負載間隔內統計出來的,
這樣的數據才能真實反映出數據庫的操作系統參數(需要執行sql測評出來)
interval:可以指定收集統計信息的時間間隔,例如 5 收集5分鐘的統計信息
命令:execute dbms_stats.gather_system_stats('noworkload',5);
START和STOP關鍵字自己決定何時開始何時結束收集統計信息
命令:execute dbms_stats.gather_system_stats('start');
上下兩條指令間隔3分鐘執行,然后把這3分鐘的統計信息寫入到sys.aux_stats$表里面
execute dbms_stats.gather_system_stats('stop');
MBRC參數,它是初始化參數db_file_multiblock_read_count的簡寫中文翻譯“一次讀多少個數據塊or一次多塊讀可以讀幾個數據塊”,
如果收集了統計信息那么CBO會用MBRC計算代價,如果沒有收集統計信息CBO會用這個初始化參數db_file_multiblock_read_count計算代價。