由動態性能表學到的ios
第一篇--v$sysstat 2007.5.23sql
按照OracleDocument中的描述,v$sysstat存儲自數據庫實例運行那刻起就開始累計全實例(instance-wide)的資源使用狀況。數據庫
相似於v$sesstat,該視圖存儲下列的統計信息:c#
1>.事件發生次數的統計(如:user commits)緩存
2>.數據產生,存取或者操做的total列(如:redo size)session
3>.若是TIMED_STATISTICS值爲true,則統計花費在執行操做上的總時間(如:CPU used by this session)oracle
v$sysstat視圖經常使用列介紹:ide
該視圖還有一列class-統計類別但極少會被使用,各種信息以下:工具
1 表明事例活動性能
2 表明Redo buffer活動
4 表明鎖
8 表明數據緩衝活動
16 表明OS活動
32 表明並行活動
64 表明表訪問
128 表明調試信息
注意:Statistic#的值在不一樣版本中各不相同,使用時要用Name作爲查詢條件而不要以statistic#的值作爲條件。
使用v$sysstat中的數據
該視圖中數據常被用於監控系統性能。如buffer cache命中率、軟解析率等均可從該視圖數據計算得出。
該視圖中的數據也被用於監控系統資源使用狀況,以及系統資源利用率的變化。正因如此多的性能數據,檢查某區間內系統資源使用狀況能夠這樣作,在一個時間段開始時建立一個視圖數據快照,結束時再建立一個,兩者之間各統計項值的不一樣(end value - begin value)便是這一時間段內的資源消耗狀況。這是oracle工具的經常使用方法,諸如Statspack以及BSTAT/ESTAT都是如此。
爲了對比某個區間段的數據,源數據能夠被格式化(每次事務,每次執行,每秒鐘或每次登錄),格式化後數據更容易從二者中鑑別出差別。這類的對比在升級前,升級後或僅僅想看看一段時間內用戶數量增加或數據增長如何影響資源使用方面更加實用。
你也可使用v$sysstat數據經過查詢v$system_event視圖來檢查資源消耗和資源回收。
V$SYSSTAT中的可用統計
V$SYSSTAT中包含多個統計項,這部分介紹了一些關鍵的v$sysstat統計項,在調優方面至關有用。下列按字母前後排序:
數據庫使用狀態的一些關鍵指標:
注:SQL語句的解析有軟解析soft parse與硬解析hard parse之說,如下是5個步驟:
1:語法是否合法(sql寫法)
2:語義是否合法(權限,對象是否存在)
3:檢查該sql是否在公享池中存在
-- 若是存在,直接跳過4和5,運行sql. 此時算soft parse
4:選擇執行計劃
5:產生執行計劃
-- 若是5個步驟全作,這就叫hard parse.
注意物理I/O
oracle報告物理讀也許並未致使實際物理磁盤I/O操做。這徹底有可能由於多數操做系統都有緩存文件,多是那些塊在被讀取。塊也可能存於磁盤或控制級緩存以再次避免實際I/O。Oracle報告有物理讀也許僅僅表示被請求的塊並不在緩存中。
由V$SYSSTAT得出實例效率比(Instance Efficiency Ratios)
下列是些典型的instance efficiency ratios 由v$sysstat數據計算得來,每項比率值應該儘量接近1:
公式:1-((physical reads-physical reads direct-physical reads direct (lob)) / session logical reads)
執行:
select 1-((a.value-b.value-c.value)/d.value)
from v$sysstat a,v$sysstat b,v$sysstat c,v$sysstat d
where a.name='physical reads' and
b.name='physical reads direct' and
c.name='physical reads direct (lob)' and
d.name='session logical reads';
公式:1-(physical reads/ (db block gets+consistent gets))
執行:
select 1 - (sum(decode(name, 'physical reads', value, 0)) /
(sum(decode(name, 'db block gets', value, 0)) +
sum(decode(name, 'consistent gets', value, 0))))
"Buffer Hit Ratio"
from v$sysstat;
公式:1 - ( parse count (hard) / parse count (total) )
執行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
Where a.name='parse count (hard)' and b.name='parse count (total)';
公式:sorts (memory) / ( sorts (memory) + sorts (disk) )
執行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='sorts (memory)' and
b.name='sorts (memory)' and c.name='sorts (disk)';
公式:1 - (parse count/execute count)
執行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name='parse count (total)' and b.name='execute count';
公式:1 - (parse time cpu / CPU used by this session)
執行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and
b.name='CPU used by this session';
是否時間花費在解析分配給CPU進行週期運算(即生產工做)。解析時間花費不在CPU週期運算一般表示因爲鎖競爭致使了時間花費
公式:parse time cpu / parse time elapsed
執行:
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and b.name='parse time elapsed';
從V$SYSSTAT獲取負載間檔(Load Profile)數據
負載間檔是監控系統吞吐量和負載變化的重要部分,該部分提供以下每秒和每一個事務的統計信息:logons cumulative, parse count (total), parse count (hard), executes, physical reads, physical writes, block changes, and redo size.
被格式化的數據可檢查'rates'是否太高,或用於對比其它基線數據設置爲識別system profile在期間如何變化。例如,計算每一個事務中block changes可用以下公式:
db block changes / ( user commits + user rollbacks )
執行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='db block changes' and
b.name='user commits' and c.name='user rollbacks';
其它計算統計以衡量負載方式,以下:
公式:db block changes / session logical reads
執行:
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='db block changes' and
b.name='session logical reads' ;
公式:sorts (rows) / ( sorts (memory) + sorts (disk) )
執行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='sorts (rows)' and
b.name='sorts (memory)' and c.name='sorts (disk)';