根據Oracle Documentation的說明:
V$sysstat displays system statistics. To find the name of the statistic associated with each statistic number (
STATISTIC#
), query the V$STATNAME
view.
--說明了V$sysstat儲存了資源使用的統計結果,從Instance啟動就開始累計。
1)V$sysstat常會用到的欄位
欄位
|
敘述
|
STATISTIC#
|
標識值(不會固定保留給同一個NAME,因此查詢要以NAME為主。
|
NAME
|
統計項的名稱
|
VALUE
|
資源使用統計
|
目前11g的版本總共有588統計項,常用的如下。
項目
|
敘述
|
CPU used by this session
|
所有session的CPU使用量(單位為百分之一秒)
|
db block changes
|
資料在database buffer cache中進行insert, update, delete的次數
|
DB time
|
CPU time + I/O time + non-idle wait time
|
execute count
|
執行SQL語句的次數
|
logons cumulative
|
累積連線的session數
|
logons current
|
目前連線的session數
|
parse count (hard)
|
執行硬解析(hard parse)的次數
|
parse count (total)
|
hard parse + soft parse
|
parse time cpu
|
CPU花在解析上的時間(單位為10ms)
|
parse time elapsed
|
解析從開始到結束總共花費時間
|
physical reads
|
從OS block讀取的次數
|
physical writes
|
被DBWn寫到Disk block的次數
|
redo entries
|
redo entry的數量
|
sorts (disk)
|
在disk中sort的次數
|
sorts (memory)
|
在memory中sort的次數
|
table scan blocks gotten
|
全表掃描的總block數
|
table scan rows gotten
|
全表掃描的總row數
|
user commits
|
執行commits的總次數
|
user rollbacks
|
執行rollback的總次數
|
透過V$syssta我們可以了解系統的狀況,甚至進行調整(tuning)的動作,以下列出該視圖計算得出的結果。
2)Buffer
Cache Hit Ratio
select (1-(a.value/(b.value+c.value)))*100
from v$sysstat a, v$sysstat b, v$sysstat c
where a.name='physical reads'
and b.name='db block gets'
and c.name='consistent gets'
from v$sysstat a, v$sysstat b, v$sysstat c
where a.name='physical reads'
and b.name='db block gets'
and c.name='consistent gets'
顯示資料命中buffer
cache的機率,越高代表資料存取有比較高的機率可以在memory中找到,而不是disk,如此一來就可以加快存取的速度。其次,也可以用來判斷設定SGA的空間是否足夠。
Buffer Cache Hit Ratio
|
越高越好
|
3)Sorts in
Memory
select round((a.value/(a.value+b.value))*100,2)
from v$sysstat a, v$sysstat b
where a.name='sorts (memory)'
and b.name='sorts (disk)'
from v$sysstat a, v$sysstat b
where a.name='sorts (memory)'
and b.name='sorts (disk)'
顯示資料排序是在memory中進行所佔的比例,越高代表資料排序的速度較快(memory的速度大於disk)。
Sorts in Memory
|
越高越好
|
4)Soft Parse
Ratio
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)';
顯示soft
parse所佔的比例,判斷是否有太多的hard
parse。
5)Execute/Parse
Ratio
select b.value/a.value
from v$sysstat a,v$sysstat b
where a.name='parse count (total)'
and b.name='execute count';
顯示平均sql語句解析一次可以執行幾次,最理想狀態是解析一次執行多次。
Execute/Parse Ratio
|
越高越好
|
6)Parse
CPU/Total CPU Ratio
select 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花費在解析上的時間,越高代表系統花費執行了太多的解析。
Parse CPU/Total CPU Ratio
|
越低越好
|
7)Parse Time
CPU/Parse Time Elapsed Ratio
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='parse time cpu'
and b.name='parse time elapsed';
顯示解析總共的時間花費在CPU進行運算上,當比例太低的時候,表示解析時間沒花在CPU通常是因為lock競爭的關係導致了時間的浪費。
Parse Time CPU/Parse Time Elapsed Ratio
|
越高越好
|
8)Short/Long
Table Scan
select(a.value/(a.value+b.value))*100
from v$sysstat a, v$sysstat b
where a.name='table scans (short tables)'
and b.name='table scans (long tables)'
顯示short
table進行全表掃描(full
table scan)的比例,short
table在進行全表掃描的效率較索引好;long
table進行全表掃描通常是不好的效率。當比例太低的時候,可能是缺乏正確的索引或是SQL寫得不好。
Short/Long Table Scan
|
越高越好
|