aux_stats$ 基表(系統(tǒng)統(tǒng)計信息)
查看操作系統(tǒng)統(tǒng)計信息
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才能查詢到,所謂的基表就是給動態(tài)性能視圖提供數(shù)據(jù)的原始表,
由于基表非常重要,oracle規(guī)定不允許直接訪問和修改基表,如果你比較了解這些那么另說了。
這個表中記錄了“操作系統(tǒng)統(tǒng)計信息”。Oracle會利用操作系統(tǒng)統(tǒng)計信息來修正執(zhí)行計劃的代價,也就是說這些信息是影響代價計算的因素之一。
注意:如果oracle收集了操作系統(tǒng)統(tǒng)計信息,那么CBO采用工作量統(tǒng)計模式計算代價
如果oracle沒有收集操作系統(tǒng)統(tǒng)計信息,那么CBO采用非工作量統(tǒng)計模式計算代價,
看上面MBRC沒有參數(shù)值就說明還沒有收集操作系統(tǒng)統(tǒng)計信息。
這兩個模式計算代價的公式是不同的。
列含義:
SQL> desc sys.aux_stats$
Name Null? Type
------------------------ -------- ----------------------------------------------------------------------------
SNAME NOT NULL VARCHAR2(30)
PNAME NOT NULL VARCHAR2(30)
PVAL1 NUMBER
PVAL2 VARCHAR2(255)
SNAME:是指操作系統(tǒng)統(tǒng)計信息
PNAME:parameter name 參數(shù)名
PVAL1:參數(shù)值
PVAL2:參數(shù)值
參數(shù)解釋
FLAGS:標志
CPUSPEEDNW:非工作量統(tǒng)計模式下CPU主頻,直接來自硬件
IOSEEKTIM:IO尋址時間(毫秒),直接來自硬件
IOTFRSPEED:IO傳輸速率(字節(jié)/毫秒)
SREADTIM:讀取單個數(shù)據(jù)塊的平均時間
MREADTIM:讀取多個數(shù)據(jù)塊的平均時間
CPUSPEED:工作量統(tǒng)計模式下CPU主頻,根據(jù)當前工作量評估出一個合理值
MBRC:oracle收集完統(tǒng)計信息后評估出的一次多塊讀可以讀幾個數(shù)據(jù)塊db_file_multiblock_read_count
MAXTHR:最大IO吞吐量(字節(jié)/秒)
SLAVETHR:平均IO吞吐量(字節(jié)/秒)
后面這6個參數(shù)是在oracle收集完統(tǒng)計信息后才能得出的參數(shù)值,有什么用呢?
CBO在計算SQL語句的代價時,需要使用數(shù)據(jù)庫對象例如表 索引 等對象統(tǒng)計數(shù)據(jù),
還要使用操作系統(tǒng)統(tǒng)計數(shù)據(jù)例如CPU周期 IO速度 數(shù)據(jù)塊讀時間等,選擇花費時間最少的執(zhí)行計劃為最佳執(zhí)行計劃。
Oracle使用dbms_stats.gather_system_stats存儲過程來收集操作系統(tǒng)統(tǒng)計信息,收集來的數(shù)據(jù)存放在sys.aux_stats$表中,
如果我們做了收集操作那么會有統(tǒng)計數(shù)據(jù),如果沒有做就沒有統(tǒng)計數(shù)據(jù),這兩種計算代價的方法是不同的。
收集系統(tǒng)的統(tǒng)計信息:
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 參數(shù),默認值“noworkload”,還可以設置為“workload”含義
noworkload:非工作量統(tǒng)計模式,收集上來的數(shù)據(jù)都是來自硬件
workload:工作量統(tǒng)計模式,收集上來的數(shù)據(jù)需要在特定的數(shù)據(jù)庫負載間隔內(nèi)統(tǒng)計出來的,
這樣的數(shù)據(jù)才能真實反映出數(shù)據(jù)庫的操作系統(tǒng)參數(shù)(需要執(zhí)行sql測評出來)
interval:可以指定收集統(tǒng)計信息的時間間隔,例如 5 收集5分鐘的統(tǒng)計信息
命令:execute dbms_stats.gather_system_stats('noworkload',5);
START和STOP關鍵字自己決定何時開始何時結束收集統(tǒng)計信息
命令:execute dbms_stats.gather_system_stats('start');
上下兩條指令間隔3分鐘執(zhí)行,然后把這3分鐘的統(tǒng)計信息寫入到sys.aux_stats$表里面
execute dbms_stats.gather_system_stats('stop');
MBRC參數(shù),它是初始化參數(shù)db_file_multiblock_read_count的簡寫中文翻譯“一次讀多少個數(shù)據(jù)塊or一次多塊讀可以讀幾個數(shù)據(jù)塊”,
如果收集了統(tǒng)計信息那么CBO會用MBRC計算代價,如果沒有收集統(tǒng)計信息CBO會用這個初始化參數(shù)db_file_multiblock_read_count計算代價。
網(wǎng)站題目:aux_stats$基表(系統(tǒng)統(tǒng)計信息)
網(wǎng)址分享:
http://weahome.cn/article/jhoohh.html