【Oracle效能調優】Oracle Statspack報告中各項指標含義詳解~~調優必看!

victorymoshui發表於2010-11-25
Oracle Statspack報告中各項指標含義詳解!
O NtOQ'JWf9390331ITPUB個人空間_o4H`{xW
Data Buffer Hit Ratio#
$[DHv ]Jjm3\M9390331資料塊在資料緩衝區中的命中率,通常應該在90%以上,否則考慮加大 db_block_buffers(9i 以上可是db_cache_size)ITPUB個人空間T.ft jNg7foM A
ITPUB個人空間*Px+UA\Y kpu
Buffer Nowait Ratio#ITPUB個人空間0e&s"[(V~6M
在緩衝區中獲取buffer 的未等待比率ITPUB個人空間5?WWC ^ HZ/~1^
ITPUB個人空間:i_H"SB3h%]M"?
Library Hit Ratio#
~h$n8K e$e3}#_im7XAP9390331ITPUB個人空間k? u^A&D*p ~K
主要代表著sql在共享區的命中率,通常在98%以上
#Y} _RM*ng9390331ITPUB個人空間Q]'bU t!I.[E
In Memory Sort Ratio#ITPUB個人空間J\]4w2Bb@
ITPUB個人空間f%JEX0b-Nx
如果過低說明有大量的排序在臨時表空間中進行,可嘗試增加sort_area_size
+k,icU4Bo9390331
:V])tK`9390331Redo Nowait Ratio#ITPUB個人空間PL"J^ hm._A

6Fy@3_ x&S9390331寫日誌的不等待比率,太低可調整log_buffer(增加)和 _log_io_size(減小,預設為1/3*log_buffer/log_block_size,使得 _log_io_size 為合適的值,比如128k/log_block_size)
0dE j9V,?9390331
N G8oB:H E bZ\9390331Soft Parse Ratio#'T5DHP/RC I.?9390331ITPUB個人空間;qUP mO&["w%v

:VYu9U#T9390331近似當作sql在共享區的命中率,通常高代表使用了繫結變數,太低需要調整應用使用繫結變數,或者參考cursor_sharing = force (9i 中增加了 similar )ITPUB個人空間Qh q4WU

C?a5hC7lf W\%M9390331Latch Hit Ratio#ITPUB個人空間iDv Bkk{f9Yw*j
ITPUB個人空間W[q%Va8\#_R3]
內部結構維護鎖命中率,高於99%,通常低是因為shared_pool_size過大和沒有使用繫結變數導致硬解析過多,可參考 _spin_count 引數設定
IJqZ"xdb9390331ITPUB個人空間,F-aXhqv&~
Percent Non-Parse CPU#ITPUB個人空間kv$I-o.d ?HA:j2Y2`
查詢實際執行時間/(查詢實際執行時間+sql解析時間),太低表示解析消耗時間過長
3\y"D'C6~9390331ITPUB個人空間8P \!rka7_
Percent Parse CPU to Parse Elapsed#ITPUB個人空間@.TMX dk j1`}%]I0H
ITPUB個人空間!KL T-z,\
解析實際所用時間/(解析實際所用時間+解析中等待資源時間),越高越好
_0O~6hF pQ5u9390331ITPUB個人空間 e8h'~NOr[s bW
Execute to Parse Percent#ITPUB個人空間w'ctd A.lI
ITPUB個人空間7p"BQ R#ct7_'@2g
該值越高表示一次解析後被重複執行的次數越多,如果過低可以考慮設定ITPUB個人空間r5E@` IF7H
session_cached_cursors > 0ITPUB個人空間5v&OX#{-W7v
ITPUB個人空間Wqx)G])mQ,t
Memory Usage Percent#ITPUB個人空間.Ua8T"oE v%k d:B

:O U|l[9390331共享池的使用率,應該穩定在75%--90%之間,太小浪費記憶體,太大則顯記憶體不足ITPUB個人空間AF_j(t)H!a0Z
ITPUB個人空間X;g6i\H_ lx
Percent of SQLs with Execution>1#ITPUB個人空間Se4nT `(p2\O_

`qK.h~Y ~9390331執行次數大於1的sql的比率(若太小可能是沒有使用繫結變數)ITPUB個人空間9x w*N%_Z
ITPUB個人空間.gY/O"NM'U:n
Percent of Memory for SQl with Execution>1#$a5ar,c;v3k9390331
] t8`g'l u!Z$d9390331執行次數大於1的sql消耗記憶體/(所有sql消耗記憶體)ITPUB個人空間0|-G {C(D-vgl

7]/t+gZ~9390331Instance Load Profile Redo Size/Sec#>#100000#  ITPUB個人空間*ou$b_ t

:M'{tDP7UJ {9390331每秒產生的日誌大小(單位位元組),可標誌資料庫任務的繁重與否ITPUB個人空間 h0qO@v"Hy#p

9rhy]6`C9390331Redo Size/Tx#>#0#  ITPUB個人空間G7lrK;?
ITPUB個人空間LwT"b6YIh
平均每個事務的日誌生成量ITPUB個人空間 ~;TD,cTL^
ITPUB個人空間;e#Ho6\{L
Logical Reads/Sec(邏輯讀)#>#0#ITPUB個人空間T:oqR,~}
ITPUB個人空間!o+J x4VqF [H
平均每秒產生的邏輯讀,單位是block
6Ls`V\9390331
!V2Ihfvj9390331Logical Reads/Tx#>#0#ITPUB個人空間,X~H'}|%NdD$L

"y}\ }yvKa9q*L9390331平均每個事務產生的邏輯讀,單位是block
"x[d,y4V(U!ll'N9390331ITPUB個人空間#|t6?A6k
Block Changes/Sec#>#100#  
.i/]%~|9kf9390331ITPUB個人空間zG k"MJ-l
每秒block變化數量,資料庫事務帶來改變的塊數量
| wD)IO1wA9390331
g)R@VE ](y9390331Block Changes/Tx#>#0#  ITPUB個人空間b:V@ U.ltS#SJ
ITPUB個人空間5}KW H }TBM,y#zG
平均每個事務所導致的改變的塊數ITPUB個人空間4m A.sd*J.i?
ITPUB個人空間s&F7Ds4?e$c,x*c@
Physical Reads/Sec#>#100#  
^huY4c(U%[R,|E9390331
E6y9l~4VB2Oa9390331平均每秒資料庫從磁碟讀取的block數ITPUB個人空間)]H-{ f:q,L}5m

1uAEc%_9390331Physical Reads/Tx#>#0#  
*pb|mIxD9390331ITPUB個人空間n8^6^P)d6t?/L%c
平均每個事務從磁碟讀取的block數ITPUB個人空間/W-Z0t0WW;Jj!p
ITPUB個人空間/t&R+L:OaH+W
Physical Write/Sec#>#50#  
,Z%K)b+? j9390331
2TpN6x9t7m-@!G}:r`9390331平均每秒寫磁碟的block數
q7J KXe:F*UE9390331ITPUB個人空間P Gc%uU [h(g
Physical Write/Tx#>#0#  ITPUB個人空間| v7Cq/|Y

I4?_Nc&p*O9390331平均每個事務寫磁碟的block數ITPUB個人空間3p'Q-L/A}z'nI
ITPUB個人空間VLR Vd/HY0b Y8c
User Calls/Sec#>#0#  
hb)Wc4jk9390331
w Tl7Wm9390331每秒使用者call次數
\Al:P3]_v9390331
3OrV+P5zr/\(zN_9390331User Calls/Tx#>#0#ITPUB個人空間z$j0}`X`

h Xj(g S8}c ~{8W9390331每事務使用者call次數
"F[#@U:B&j'uU W9390331
"V k8H s7}+~9390331Parses/Sec#>#100#  ITPUB個人空間C&M M'r)T/xd_

-uJL t:XYW;E,j.f}9390331每秒解析次數,近似反應了每秒語句的執行次數ITPUB個人空間4Dw'Z5A m,Y

.o%]4N;\c6J9390331Parses/Tx#>#0#  
1f-Qh g5WY-[9390331ITPUB個人空間L"ap]'k~#b
每事務產生的解析次數
2kcCqtOhy9390331ITPUB個人空間*S/HX`O%S!~
Hard Parses/Sec#>#10#  ITPUB個人空間G_C ?;jgM B
ITPUB個人空間w(A AY2\4w)a
每秒產生的硬解析次數ITPUB個人空間-SMmj1V%F

#|5v$X[pT ` y9390331Hard Parses/Tx#>#0#  
VRN)^ GbO |9390331ITPUB個人空間_z d]bo mIy
每事務產生的硬解析次數
&B.H1C.wrxkuD4{9390331
%J ePJ2Y1|w0F9390331Sorts/Sec#>#20#  ITPUB個人空間u?5jDN|)_nY
ITPUB個人空間Q4DyB/p)\;iSB
每秒產生的排序次數ITPUB個人空間RZ6^mN9r:H#C
ITPUB個人空間)X&f T4G^7B2h
Sorts/Tx#>#5#
({"f{7?%][BVJ C9390331
ITPUB個人空間#Cy)f'{"P%Z)_"s$v
每事務產生的排序次數
a!R'srm9390331ITPUB個人空間HMwi/z7H$t `
Transactions/Sec#>#0#  
S9Ae9x)Sd R9390331
0K]3l ^Un9390331每秒產生的事務數ITPUB個人空間Q#h]-x-A'E"o&N;V

9TP#x @ E9390331Rows/Sort#>#0#ITPUB個人空間p8Yp4s+L&}

q`)}[f9390331每次排序所涉及到的行數
j5{0pZ%Ju7V#g9390331ITPUB個人空間q]:^1a*b'VRd C7^
Percent of Block Changed/Read#>#0#
Q"v0XO+|Dsj9390331

*I];HW \&n$Gc e&q9390331發生變化的塊數/讀次數,變化的塊需要從回滾段來資料
p3o2f[C6D EB q9390331ITPUB個人空間_ L+F&b5Az&E3a/ZW
Recursive Call Percent#>#0#  ITPUB個人空間%C-Z4j&rC'l%r
ITPUB個人空間yyU#i#Z+vj v
遞迴操作佔所有操作的比率ITPUB個人空間K IPB.LI
ITPUB個人空間'Noxzw9?B
Rollback/Tx Percent#>#5#  ITPUB個人空間!kJ,]"J?u,[ YA
ITPUB個人空間N&^:|_M
事務回滾率(回滾開銷很大)ITPUB個人空間` r$L-a.@
ITPUB個人空間FTc![8_2i
Executes/Sec#>#0#
o I8I}/Mj e9390331ITPUB個人空間 VU0F&\N1q7U{
每秒執行次數
K i_j1W&?M/h9390331ITPUB個人空間U6?7E6LU,e(c
Execute/Tx#>#0#  ITPUB個人空間}v-z_k|8o+eMv1D*a
ITPUB個人空間'?m r;I$n2nd
每個事務執行次數ITPUB個人空間k3nu]/QJ+rkO\

|;vk0cj {-LY9390331Logons/Sec --46: Logons/Tx  ITPUB個人空間!ZhQv*GA:h$TP

&X+R1mfu9390331I/O Statistics(I/O統計資料) Table Space I/O#>#0#ITPUB個人空間5Uqwe#C/a,Nw*e
表示各表空間在IO上的分佈,若出現嚴重不均衡,則要重新考慮物件的儲存規劃和資料檔案的磁碟規劃
Xz#aCcG E%@9390331ITPUB個人空間/O m@-H] W@
ITPUB個人空間J$ByM.wU-D)iR
Datafile I/O#>#0#  
,P @ lOs dzxc c1a9390331ITPUB個人空間{3x*K@r7N
表示各資料檔案的IO分佈,若不均衡則需要重新考慮物件的儲存規劃ITPUB個人空間 et{2mhTc

rA4e;r eW ~zs*L }9390331Table I/O(表I/O)#>#0#ITPUB個人空間 qf?.L7cZp*Ke
ITPUB個人空間8C6|'S)n6x'j0n
對這些IO很大的表,要考慮放置在高速磁碟上,並且儘可能的分佈在不同的磁碟上
M k|#D CpKZ B.H9390331
*s#|xt2L6u3X {|9390331TOP SQL Top SQL with High Buffer Gets#>#0#  ITPUB個人空間n;tA(VV
ITPUB個人空間1? |9^%t*c6~,UW
這類sql進行了大量的block的讀,要檢查該sql是否用到了索引,或者說表上是否存在合理的索引,對於必須全表掃描的大表可以考慮recycle buffer ,對於頻繁進行全表掃描的小表可以考慮keep buffer,還有一種需要注意的情況就是如果通過索引獲取資料比例佔表資料比例過大,比如20%(舉例資料),就能導致buffer gets過大
,lj \ZKjo9390331
B#w+I7tSd$n7e9390331Top SQL with High Physical Reads#>#0#
#t8cJe3}C9390331
ITPUB個人空間0lO?Pv%o
這類sql導致了大量的從磁碟獲取資料,可能因為資料緩衝區太小,也可能是過多的全表掃描,需要考察索引是否合理,是否用到索引
D.|} `%Z\&o9390331
s1H%e ma C9390331Top SQL with High Execution Count#>#0#
7d]N5L7t7@,lM9390331

l:wZ:_\k'^9390331這類sql是需要重點關注的,也許這些sql本身一次執行並沒有消耗大量的時間或者空間,但由於頻繁的執行對系統影響極大,所以只要有優化的可能到要對這些sql進行優化。還有另外一些情況,就是某些程式中可能大量頻繁地使用dual表來獲取一些資訊(比如時間的計算等),儘可能的使這類sql轉化為應用本地能解決的函式,或者還存在一些由於設計上的缺陷導致不必要的查詢,都要在設計的角度避免這些查詢
`*]%X$E q.f9390331
s:l'`B$MO5`9390331Top SQL with High Shared Memory#>#0#  
nx;D2|u9390331
jG!^jc)g9390331這類sql使用了大量的記憶體,不一定執行的頻繁,但是它可能把執行的頻繁的sql涉及的一些資料擠出緩衝區,這同樣將導致很多問題,所以也需要從儘可能的優化
~z3F S Pce$ozK9390331ITPUB個人空間'J4yp Am8k2RI2u
Top SQL with High Version Count#>#20#  
n!xEG+u"Z9Dg)I9390331
a6wds l(O0F!z%P?u9390331表示多個使用者的sql在字面上是一樣的,或者sql雖然一樣但是session的一些引數發生了改變(比如sort_area_size發生了變化)
d%z6q+C7tCt9390331
:U)h L1I^9390331Wait Events(等待事件) alter system set mts_dispatcher#>#0#  ITPUB個人空間H!N3qR_*v

&g os,}'a/Zy9390331當會話決定執行"ALTER SYSTEM SET MTS_DISPATCHERS = "的時候等待DISPATCHERS的啟動ITPUB個人空間 K N#T/zhr1] ^@;^ qZ
ITPUB個人空間n w)nS{7n2S"V
BFILE check if exists#>#0#  
5r ixpb9390331
@'r#b;B!h9390331檢查外部的bfile檔案是否存在ITPUB個人空間4} Ke6q8E*dM[ ?
ITPUB個人空間G%L PH6Y,i8?4Ip
BFILE check if open#>#0#  ITPUB個人空間 n Jhoj tV/F
ITPUB個人空間~.m-| r2c+a
檢查外部的bfile檔案是否已經open
C"xE$|+b1@9390331ITPUB個人空間)Jgs%lx
BFILE closure#>#0#ITPUB個人空間3z s ~]mz0W"d(?
ITPUB個人空間Yx)_ oh5z,g
等待關閉外部bfile檔案ITPUB個人空間^`&GmG%S{
ITPUB個人空間5W r7a&nN
BFILE get length#>#0#ITPUB個人空間5J'UF;h;cn

O"rh%sGR B9390331獲得外部bfile檔案的大小ITPUB個人空間1dx9^Q&Y p

I#J:Sk D,[ p9390331BFILE get name object#>#0#ITPUB個人空間;gU#C.h~
ITPUB個人空間/}],_~,E6~x
得到外部bfile檔案的名字ITPUB個人空間6]W,Fd6~:n f

{!T/BM:b(h+R9390331BFILE get path object#>#0#  ITPUB個人空間1Jd\[u"xP c
ITPUB個人空間L$n.b"q T+gC
得到外部bfile檔案的路徑ITPUB個人空間 K-} ?%~\^

]b1T9VE8Y'\9390331BFILE internal seek#>#0#  ITPUB個人空間n HV4t/V-zOh"r
ITPUB個人空間s(f2S,P3K/o'Ow NB
BFILE open#>#0#ITPUB個人空間6u;f^`(g,I%b
等待外部bfile被開啟ITPUB個人空間O1BwD{ t8v0mL!b

YYY0N%j{ }d9390331BFILE read#>#0#  ITPUB個人空間$AKI yeK [#TFD
ITPUB個人空間 Sz BnT Z;KB
等待外部bfile檔案讀取完畢
M6e*b|\1Z6S:B9390331
;J Eg#['VWJ9390331buffer busy due to global cache#>#0#  
9v4v0tGP[ m.p,Z1s9390331ITPUB個人空間6m.w/cEqP
buffer busy waits#>#0#
3jTd M7NHm)cSX9390331ITPUB個人空間@ IW.d] okjv!Z
block正被讀入緩衝區或者緩衝區正被其他session使用,出現此情況通常可能通過幾種方式調整:增大data buffer,增加freelist,減小pctused,增加回滾段數目,增大initrans,考慮使用LMTITPUB個人空間DoS6f/_qa/w#v'\ W
ITPUB個人空間"T'hc9D$C#| W
buffer deadlock#>#0#  
:{6`7oKEkJ9390331ITPUB個人空間8jaF-?$u
由於系統緩慢所產生而非應用產生了死鎖ITPUB個人空間{m-V5F8MqSj^9R e
ITPUB個人空間6?2ER6N'L7PH9Ikk
buffer latch#>#0#ITPUB個人空間,`"rY]_([|N2F\
ITPUB個人空間bXF0y8A\A:^ Ryd \
會話等待'buffer hash chain latch'ITPUB個人空間E cRONL-n9R})~

.E1m Pm4M7L,AH9390331buffer read retry#>#0#  
&NQV1m {\8hP9390331ITPUB個人空間j}P+qO W(O
OPS下讀buffer的過程中內容發生了變化於是重新讀取ITPUB個人空間l4sS;R^h#~;C+y9U m wd
ITPUB個人空間GQU2S%z
Cache simulator heap#>#0#  
'pA'hU[Gy9390331ITPUB個人空間OR+J~we
checkpoint completed#>#0#ITPUB個人空間8pyo3Sy,sR
等待檢查點的完成,通常出現這個問題的原因是IO問題嚴重,可調整跟檢查點相關引數log_checkpoint_interval,log_checkpoint_timeout,db_block_max_dirty_target,fast_start_io_target 等,可間接的增大日誌檔案大小和增加日誌檔案組數ITPUB個人空間c Yd$V*D o ?
ITPUB個人空間(^SU#l&C9f
Contacting SCN server or SCN lock master#>#0#  
tx5O]p5X[+Z L"\9390331ITPUB個人空間sL9v2KD+uf#fc
control file parallel write#>#0#  ITPUB個人空間;II h V,p)Rz;w
ITPUB個人空間DKs,z+mLEB&^!J
等待寫所有控制檔案的完成,可將控制檔案分散在不同的磁碟上ITPUB個人空間jaQMS
ITPUB個人空間(Vf)s+[/z+@Mq'f
control file sequential read#>#0#  
ID\D ~%uR9390331
9w|OB HR9390331讀控制檔案,在備份控制檔案、OPS等情況下產生ITPUB個人空間%Ay OP6kCvtU)B'U2ZO:w

$F0u2f8D_ d&fMx9390331control file single write#>#0#  
;v{A~[L,Qz9390331
r_%T}yq#o9390331OPS下同一時刻只允許一個session將共享資訊寫入磁碟
1H,Uf ]'VZzm(~f@9390331
TASe;`S0e L!fv9390331conversion file read#>#0#  ITPUB個人空間R4Eyd-BK

kL"C-~6@ZHy"d+U Z9390331db file parallel read#>#0#  
\tc+q2[8A'tM9390331
khpaky9390331做恢復的並行從資料檔案獲取資料ITPUB個人空間Gj|8|'Bg1d'gF(xi

6T9}hS^6WlS9390331db file parallel write#>#0#  
X2? X[\&x7z:E;h?9390331
4[k#~A2g!S!]H PG9390331當多個IO可以同時發生時(多磁碟),DBWR可並行寫入,DBWR等待最後一個IO的完成ITPUB個人空間0Mt zG|;[8D$BO)p,z-t
ITPUB個人空間j4GD$H{2W
db file scattered read#>#0#  ITPUB個人空間*koR {7af&Y
ITPUB個人空間|J#nx1d,U.U(X\
一次獲取的block被分散在buffer的不連續空間中,通常表示全表掃描過多,可檢查應用程式是否合理的使用了索引,資料庫是否合理的建立了索引
l!Tp,r G3Tn-L L7~#e9390331
?[4[%va"g;vb9390331db file sequential read#>#0#  ITPUB個人空間E9QM2}r$R"A
ITPUB個人空間\3ZtD hW
通常暗示著通過索引獲取資料量比較大(比如通過索引進行範圍掃描獲取表資料百分比過大),多表連線的時候連線順序不當,hash join時hash_area_size無法容納hash table
Cbl-hG9390331
,o7D)J$S3|#ZtCw&X#X9390331db file single write#>#0#  
eDC&b'X n9390331
&G;lS,A6}9z9390331更新資料檔案頭出現等待
`3_/Meu9390331ITPUB個人空間k CtTcN B g7^
debugger command#>#0#  ITPUB個人空間G5Jt2yOz1w
ITPUB個人空間nPP9}R0_ \!E
DFS db file lock#>#0#  
{N{f8F9390331
4`hL6\2VC8wF9390331OPS下每個例項在資料檔案上有一個共享的全域性鎖,當要offline資料檔案的時候等候其他例項同步檔案ITPUB個人空間-s| _)Qo+b-S
ITPUB個人空間)U*|2[jJ^:A0Z8|#US
DFS lock handle#>#0#
n)R cKg(k9390331
ITPUB個人空間#|%y2v'nOm,D
會話等待一個全域性鎖請求
Y-gVm,^2H#r$q9390331ITPUB個人空間*SR~#Vh
direct path read#>#0#ITPUB個人空間6mV;n"DNaJ"Lx4J3o
ITPUB個人空間"|2Le/@t |sf0B
通常發生在臨時表空間排序、並行查詢中
7v8M-n8_J-Y}}^9390331ITPUB個人空間&`(iD)Qp q5L
direct path read (lob) #>#0#
y!S/v!O _9NkV9390331
T q%xI,s$Br(|h9390331direct path write#>#0#  
o{^G1caA9390331ITPUB個人空間Jn2}6Z6c,u+z
direct方式匯入資料(sqlldr,CTAS)、PDML、臨時表空間排序ITPUB個人空間6H } fT-\8_)G

$` E9H-UVA)f9390331direct path write (lob)#>#0#  
o~)d YK8HY \@K]9390331ITPUB個人空間8b hV\0n8\eN
dispatcher listen timer#>#0#  ITPUB個人空間/HO;C_\l7i
ITPUB個人空間m/X"O1hIL/g/T*^h
dispatcher shutdown#>#0#  ITPUB個人空間0WR*w:aPZi8^;IFU/O
ITPUB個人空間7B^dk e7FL
dispatcher timer#>#0#  ITPUB個人空間_3UV!q?2F"cm
ITPUB個人空間:X {C^d e A"p
DLM generic wait event#>#0#  ITPUB個人空間 D U#h:nfU%vDJ+]
ITPUB個人空間Yt!H)Bp!Yh
dupl. cluster key#>#0#  ITPUB個人空間)VId6pi\;NR

v4x;BF-mgX9390331enqueue#>#0#
^&W#Z.^H["Lr9390331
ITPUB個人空間r%H?7VAB J&wMf
對共享資源的獲取要求一種排隊(FIFO)的機制以保護共享資源,
)}:H6i y] _ I_9390331ST enqueue表示空間分配或者釋放導致的問題可採用LMT表空間來避免,ITPUB個人空間*M U;Zup"v
TX enqueue主要產生於唯一索引重複、bitmap index 的頻繁更新、initrans太小或者pctfree過小
|KhC1Z0e9390331ITPUB個人空間9^^?.B gH C7\ a
file identify#>#0#
\;^g!h U lW.]1^9390331
E%F6kwT,D&C9390331file open#>#0#  
v(pd L(D;u&o,eP9390331ITPUB個人空間fuJ(P(g#SqM PS
free buffer waits#>#0#  
u"D o8G'Q)r6H D` _*m4l9390331ITPUB個人空間gh}9j I)c-te
在緩衝區中尋找可用buffer出現等待,可能資料緩衝區太小,也可能檢查點間隔太長,也可能頻繁的DML而IO成為瓶頸
W#Yj8C0w9390331
Z;o^*Y'i ~-J _VHQ9390331free global transaction table entry#>#0#
peL]r;MI.O9390331
MFK1c?"~9390331分散式資料庫中會話等待一個全域性事務槽
T z,Yz/~9390331
/g RY_,d8m+h9390331free process state object#>#0#  ITPUB個人空間'h;v9rJ(^.O0C5L)S

x#bCt/iC9390331global cache bg acks#>#0#  ITPUB個人空間*qN/u ZX7R ?

l7[%QE1@*GD2Vg'~:u9390331global cache cr request#>#0#  
c\v.P k-tw9390331
F3g2q!IK6p}w9390331global cache freelist wait#>#0#  
/Q,cmFN6oS9390331ITPUB個人空間'C&_)w pTjG1|e(y
global cache lock busy#>#0#ITPUB個人空間+Z.r&QH!H1uD$hC*K4m
ITPUB個人空間T9iM+wU1H.H1_ PD
會話等待將一個buffer從當前共享狀態轉換為當前獨佔狀態
*[,Q}/bnu9390331ITPUB個人空間3D"?#iJ#r
global cache lock cleanup#>#0#  
q:~@5]r9390331ITPUB個人空間:iW \ w"U4`C{ G
global cache lock null to s#>#0#  ITPUB個人空間%lA"?jY.r,q

~l1P^8jSx D9S#um9390331
mY'i(\(P E9390331global cache lock null to x#>#0#  
I7VAW x1b-\s4q9390331
r$~j*dXu9390331global cache lock open s#>#0#  ITPUB個人空間 J/F{Jua8vu7e
ITPUB個人空間-H*S!w[2IY _*x
global cache lock open x#>#0#  
u,k5i;@Bc)W1t'R!q7l9390331
"g!rr,T F V C*YQ ?9390331global cache lock s to x#>#0#  ITPUB個人空間 Hv'r9r?N%NE"lvV

T6X+P2@A4lg6dm9390331global cache multiple locks#>#0#ITPUB個人空間 kQh gY

5u(x:yBs:ml9390331global cache pending ast#>#0#  
^ xzEEKlh9390331ITPUB個人空間@4z$ho9Hjz
global cache pending asts#>#0#  
6s}-~+O!~9Q-jzC.{9390331
\RZ*|)m(@G}#X9390331global cache retry prepare#>#0#ITPUB個人空間\ u5a0E We(KcT
ITPUB個人空間avaS8JL4t.Po
global cache retry request#>#0#  ITPUB個人空間&P"hj]}2~:zY|c
ITPUB個人空間zaR&[y'h0q)l9f$K
imm op#>#0#  
c|Lv4j_9390331
M)s%]:h2Bc*W ~N5aa-V9390331inactive session#>#0#  ITPUB個人空間'[!k2^m$J V

,t-{*[&KC j:D9390331inactive transaction branch#>#0#  ITPUB個人空間 dZ$a7] S
ITPUB個人空間*QK,E Z%B5f8k1l
index block split#>#0#
)v pCO3z5@H X9390331
#X%iEy)W/~,ii1c9390331當在索引中查詢一個key的時候如果發現該索引block正在裂變則等待裂變完成ITPUB個人空間k_p-}u$} m9kE

)V%L|;c1_ ]9390331io done#>#0#
!fL]I Jz$zF9390331ITPUB個人空間,EA?g'R
會話等待IO的完成
1c+y(Hj^q2~9390331ITPUB個人空間 g6M-P4q$~ F _R
KSIM GDS request cancel#>#0#  ITPUB個人空間5y(y1ab?!Z-e&Q
ITPUB個人空間} |j4h:s_}!}X
latch activity#>#0#  ITPUB個人空間@:?]kX:R1^PF
ITPUB個人空間j1h.}*[g)U$G Q
latch free#>#0#  
_q-_`/o#Z9390331
-~(cs{#w9390331latch是一種維護記憶體的鎖,不採用排隊機制,快速的獲取然後很快釋放,造成的原因通常有程式沒有使用繫結變數、shared_pool_size設定過大(比如1G)、LRU競爭、某些塊過熱(訪問太頻繁)ITPUB個人空間 O:y2E y j(m"A&THX
ITPUB個人空間^qnd#Y
LGWR wait for redo copy#>#0#
'Q*i4ne)qRE?.R9390331
(k-x9L+GE%s Afw9390331表示等待redo allocation and redo copy latches,可增加 _log_simulteneous_copies(預設為 2*CPUs),但同時也容易引入redo allocation latch contention,所以需要慎重
1u:],j v&t%jqz9390331ITPUB個人空間yJ w9?y y s0h
library cache load lock#>#0#ITPUB個人空間uP Xv$K2J;}6[7V(P

N.SOZ*d K:{H:_Z9390331library cache lock#>#0#  ITPUB個人空間2Ecv` Z+p([R

Eig#XnI x9390331library cache pin#>#0#  
]1fm jDPI9W9390331
b_x;d ^0f\?`9390331listen endpoint status#>#0#  
Y,C c[3]9390331
f%g'G oc F:d(Y9390331LMON wait for LMD to inherit communication channels#>#0#ITPUB個人空間e(u*K)V3k`
ITPUB個人空間A4luh*c?uD:XZ
local write wait#>#0#  
e#Etj ~em"_9390331ITPUB個人空間 e)l+d%QAY7Tj
lock manager wait for dlmd to shutdown#>#0#  ITPUB個人空間GO.} t Axr

Q Y7?mY9390331lock manager wait for remote message#>#0#  ITPUB個人空間9ayS5Y)lH

ai6t6s [}/Z ~9390331log buffer space#>#0#ITPUB個人空間0Yx7Y w,SM4@E OA/e
ITPUB個人空間m[*qtx$[h,U(`
生成日誌等待lgwr趕快寫檔案而騰出log buffer,可在init引數檔案中增大 log_buffer,置日誌檔案於高速磁碟上
r&~,~O-rc#Ym5S2BD9390331
0bd!S*s l!I }rl`.^9390331log file parallel write#>#0#  ITPUB個人空間3wo N*O"qZ-i+m
ITPUB個人空間+j"T-@ PVC6V T
當lgwr寫日誌檔案的過程中出現等待,這個等待通常會導致 log file sync事件,放置日誌檔案於高速磁碟上
ra0b.sW[Y.d9390331
&L-] d j_,p:fg9390331log file sequential read#>#0#  
"HC[ K/_9B [!d9390331ITPUB個人空間&Cd4A~is\(gh
log file single write#>#0#  ITPUB個人空間VxQv} ZH!J

P&Wc7hLiy*F A9390331log file switch (archiving needed)#>#0#
+y#Ix&Y0f9390331
ITPUB個人空間R8F]#T'}}$Q9L
當日志切換的時候由於日誌組迴圈使用了一圈但日誌歸檔還沒有完成,通常是io有嚴重問題,可增大日誌檔案和增加日誌組,調整log_archive_max_processes
1TN6cgm9390331ITPUB個人空間;R!@D9O Ei[h
log file switch (checkpoint incomplete)#>#0#
1\ `/m U7d9390331
ITPUB個人空間2@?|?'h
當日志切換的時候由於日誌組迴圈使用了一圈但將被使用的日誌組中的checkpoint還沒有完成造成,通常是io有嚴重問題,可增大日誌檔案和增加日誌組
k p}vh*y&Sq8]E'@9390331
1l$f'?y/P6D8p)y]c v9390331log file switch (clearing log file)#>#0#  
P?'Fak)R9390331
M,a V$vW*F F&qS/^9390331log file switch completion#>#0#  ITPUB個人空間ZYg6S9O,bj
ITPUB個人空間2H$SU/m6h0s
write complete waits#>#0#
8EVr$Pi?G%O$v%[9390331

hE D-^8O gfB9390331使用者等候buffer被寫進檔案,暗示著寫資料檔案等待ITPUB個人空間/DwZm&J+AT5e

Dpkpf4T+j mq9390331log file sync#>#0#
G$V/F1x?fb{5W%B5aA9390331

r-o_f)MSX9390331當使用者commit的時候通知lgwr寫日誌但lwgr正忙,造成的可能原因是commit太頻繁或者lgwr一次寫日誌時間太長(可能是因為一次log io size 太大),可調整 _log_io_size,結合log_buffer,使得(_log_io_size*db_block_size)*n = log_buffer,這樣可避免和增大log_buffer引起衝突;置日誌檔案於高速磁碟上
4E C#@+j!gH9390331
;eD:D#[0z$h9390331log file sync
Rb{msJ w;i9390331: 當某個因素導致需要寫 redo 進 file的時候(通常是commit發生),發現 lgwr 正在寫,而產生等待 造成的因素: 1: commit 太頻繁(這個道理的解釋可以說比如我們去食堂帶飯,一次帶一盒跟一次帶2合),雖然2合可能多消耗一點力氣,但這個來回的準備動作可以看做程式之間的通訊、磁頭的控制權的獲取等等硬體因素,所以不是簡單的1次寫100k等於50k寫2次,一次寫100的代價會小於2次寫50k,但問題在於如果有在剛開始寫之後有其他commit發生,該commit可能在第一次50k寫完之後就開始寫入,這樣只等待50k的時間而不用等待100k的寫時間。這是很微小的發生在commit不頻繁但是大事務經常存在的時候的現象。這個時候調整_log_io_size 或許能產生效果 2: 但若一次寫的太多也可能導致該等待事件的出現3: 從IO本身的快慢來講,更容易造成該事件,所以我們在IO方面來考慮更直接有效
$Z7hM#w1dn)mY$]9p9390331ITPUB個人空間HBm]Y][#i

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-680312/,如需轉載,請註明出處,否則將追究法律責任。

相關文章