動態性能視圖總結

看到一個文檔,總結動態性能視圖的,總結以下:ios

1 v$sysstat 2
2 v$sesstat 7
3 v$sql 9
4 V$SQL_PLAN 11
5 V$SQLTEXT 13
6 V$SQLAREA 14
7 V$SESSION 15
8 V$SESSION_WAIT 17
9 V$SESSION_EVENT 20
10 V$PROCESS 20
11 V$LOCK 23
12 V$LOCKED_OBJECT 27
13 V$FILESTAT 28
14 V$SESSION_LONGOPS 29
15 V$LATCH 30
16 V$LATCH_CHILDREN 33
17 V$DB_OBJECT_CACHE 34
18 V$OPEN_CURSOR 34
19 V$PARAMETER&V$SYSTEM_PARAMETER 36
19 V$ROLLSTAT 37
20 V$ROWCACHE 40
21 V$SEGSTAT 41
22 V$SEGMENT_STATISTICS 42
23 V$SYSTEM_EVENT 43
24 V$UNDOSTAT 43sql


 

學習動態性能表

1 v$sysstat

 

  按照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

l STATISTIC#: 標識工具

l NAME: 統計項名稱性能

l VALUE: 資源使用量

該視圖還有一列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統計項,在調優方面至關有用。下列按字母前後排序:

 

數據庫使用狀態的一些關鍵指標:

l CPU used by this session:全部sessioncpu佔用量,不包括後臺進程。這項統計的單位是百分之x.徹底調用一次不超過10ms

l db block changes:那部分形成SGA中數據塊變化的insert,updatedelete操做數 這項統計能夠大概看出總體數據庫狀態。在各項事務級別,這項統計指出髒緩存比率。

l execute count:執行的sql語句數量(包括遞歸sql)

l logons current:當前鏈接到實例的Sessions。若是當前有兩個快照則取平均值。

l logons cumulative:自實例啓動後的總登錄次數。

l parse count (hard):在shared pool中解析調用的未命中次數。當sql語句執行而且該語句不在shared pool或雖然在shared pool但由於二者存在部分差別而不能被使用時產生硬解析。若是一條sql語句原文與當前存在的相同,但查詢表不一樣則認爲它們是兩條不一樣語句,則硬解析即會發生。硬解析會帶來cpu和資源使用的高昂開銷,由於它須要oracleshared pool中從新分配內存,而後再肯定執行計劃,最終語句纔會被執行。

l parse count (total):解析調用總數,包括軟解析和硬解析。當session執行了一條sql語句,該語句已經存在於shared pool而且能夠被使用則產生軟解析。當語句被使用(即共享) 全部數據相關的現有sql語句(如最優化的執行計劃)必須一樣適用於當前的聲明。這兩項統計可被用於計算軟解析命中率。

l parse time cpu:總cpu解析時間(單位:10ms)。包括硬解析和軟解析。

l parse time elapsed:完成解析調用的總時間花費。

l physical readsOS blocks read數。包括插入到SGA緩存區的物理讀以及PGA中的直讀這項統計並不是i/o請求數。

l physical writes:從SGA緩存區被DBWR寫到磁盤的數據塊以及PGA進程直寫的數據塊數量。

l redo log space requests:在redo logs中服務進程的等待空間,表示須要更長時間的log switch

l redo sizeredo發生的總次數(以及所以寫入log buffer),以byte爲單位。這項統計顯示出update活躍性。

l session logical reads:邏輯讀請求數。

l sorts (memory) and sorts (disk)sorts(memory)是適於在SORT_AREA_SIZE(所以不須要在磁盤進行排序)的排序操做的數量。sorts(disk)則是因爲排序所需空間太大,SORT_AREA_SIZE不能知足而不得不在磁盤進行排序操做的數量。這兩項統計一般用於計算in-memory sort ratio

l sorts (rows): 列排序總數。這項統計可被'sorts (total)'統計項除盡以肯定每次排序的列。該項可指出數據卷和應用特徵。

l table fetch by rowid:使用ROWID返回的總列數(因爲索引訪問或sql語句中使用了'where rowid=&rowid'而產生)

l table scans (rows gotten):全表掃描中讀取的總列數

l table scans (blocks gotten):全表掃描中讀取的總塊數,不包括那些split的列。

l user commits + user rollbacks:系統事務起用次數。當須要計算其它統計中每項事務比率時該項能夠被作爲除數。例如,計算事務中邏輯讀,可使用下列公式:session logical reads / (user commits + user rollbacks)

 

注:SQL語句的解析有軟解析soft parse與硬解析hard parse之說,如下是5個步驟:

1:語法是否合法(sql寫法)

2:語義是否合法(權限,對象是否存在)

3:檢查該sql是否在公享池中存在

-- 若是存在,直接跳過45,運行sql. 此時算soft parse

4:選擇執行計劃

5:產生執行計劃

-- 若是5個步驟全作,這就叫hard parse.

 

注意物理I/O

 

  oracle報告物理讀也許並未致使實際物理磁盤I/O操做。這徹底有可能由於多數操做系統都有緩存文件,多是那些塊在被讀取。塊也可能存於磁盤或控制級緩存以再次避免實際I/OOracle報告有物理讀也許僅僅表示被請求的塊並不在緩存中。

 

V$SYSSTAT得出實例效率比(Instance Efficiency Ratios)

 

下列是些典型的instance efficiency ratios v$sysstat數據計算得來,每項比率值應該儘量接近1

 

l Buffer cache hit ratio:該項顯示buffer cache大小是否合適。

公式: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';

 

l Buffer hit ratio:該項顯示buffer命中率。

公式: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;

 

l Soft parse ratio:這項將顯示系統是否有太多硬解析。該值將會與原始統計數據對比以確保精確。例如,軟解析率僅爲0.2則表示硬解析率過高。不過,若是總解析量(parse count total)偏低,這項值能夠被忽略。

公式: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)';

 

l In-memory sort ratio:該項顯示內存中完成的排序所佔比例。最理想狀態下,在OLTP系統中,大部分排序不只小而且可以徹底在內存裏完成排序。

公式: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)';

 

l Parse to execute ratio:在生產環境,最理想狀態是一條sql語句一次解析多數運行。

公式: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';

 

l Parse CPU to total CPU ratio:該項顯示總的CPU花費在執行及解析上的比率。若是這項比率較低,說明系統執行了太多的解析。

公式: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';

 

l Parse time CPU to parse time elapsed:一般,該項顯示鎖競爭比率。這項比率計算

是否時間花費在解析分配給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';

 

 

其它計算統計以衡量負載方式,以下:

l Blocks changed for each read:這項顯示出block changesblock reads中的比例。它將指出是否系統主要用於只讀訪問或是主要進行諸多數據操做(如:inserts/updates/deletes)

公式: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' ;

 

l Rows for each sort

公式: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)';

2 v$sesstat

 

  按照OracleOnlineBook中的描述,v$sesstat存儲sessionloginlogout的詳細資源使用統計。

 

  相似於v$sysstat,該視圖存儲下列類別的統計:

 

l 事件發生次數的統計,如用戶提交數。

l 數據產生,存取或者操做的total(如:redo size)

l 執行操做所花費的時間累積,例如session CPU佔用(若是TIMED_STATISTICS值爲true)

注意:

若是初始參數STATISTICS_LEVEL被設置爲TYPICALALL,時間統計被數據庫自動收集若是STATISTICS_LEVEL被設置爲BASIC,你必須設置TIMED_STATISTICS值爲TRUE以打開收集功能。

 

若是你已設置了DB_CACHE_ADVICE,TIMED_STATISTICSTIMED_OS_STATISTICS,或在初始參數文件或使用ALTER_SYSTEMALTER SESSION,那麼你所設定的值的值將覆蓋STATISTICS_LEVEL的值。

 

v$sysstatv$sesstat差異以下:

l v$sesstat只保存session數據,而v$sysstat則保存全部sessions的累積值。

l v$sesstat只是暫存數據,session退出後數據即清空。v$sysstat則是累積的,只有當實例被shutdown纔會清空。

l v$sesstat不包括統計項名稱,若是要得到統計項名稱則必須與v$sysstatv$statname鏈接查詢得到。

 

v$sesstat可被用於找出以下類型session

l 高資源佔用

l 高平均資源佔用比(登錄後資源使用率)

l 默認資源佔用比(兩快照之間)

 

V$SESSTAT中使用統計

  多數v$sesstat中的統計參考是v$sysstat描述的子集,包括session logical reads, CPU used by this session, db block changes, redo size, physical writes, parse count (hard), parse count (total), sorts (memory), and sorts (disk).

 

V$SESSTAT經常使用列說明

l SIDsession惟一ID

l STATISTIC#:資源惟一ID

l VALUE:資源使用

 

 

示例1:下列找出當前session中最高的logicalPhysical I/O比率.

 

  下列SQL語句顯示了全部鏈接到數據庫的session邏輯、物理讀比率(每秒)logicalphysical I/O比率是經過自登錄後的時間消耗計算得出。對於sessions鏈接到數據庫這種長週期操做而言也許不夠精確,不過作個示例卻足夠了。

 

先得到session邏輯讀和物理讀統計項的STATISTIC#值:

SELECT name, statistic#

FROM V$STATNAME

WHERE name IN ('session logical reads','physical reads') ;

相關文章
相關標籤/搜索