《深入解析Oracle》第九章,等待事件

louloueva發表於2009-04-20

進入倒數第二章,從題目來說,是個人比較生疏的章節
不過看過後,發現之前自學的過程中,已經接觸不少了

等待事件,算是對於資料庫效能優化極其重要的參考部分
Oracle的每個版本中所包含的等待事件數量各不相同
通過V$EVENT_NAME檢視,可以檢視當前版本所支援的等待事件名稱和部分相關資訊
而V$SYSTEM_WAIT_CLASS檢視,提供了各種等待事件的等待次數和時間
以前自學過的V$SESSION檢視可以和V$SESSION_WAIT檢視相結合
來查詢各個SESSION中各自的等待資訊
(版本到了10g後,V$SESSION檢視將V$SESSION_WAIT檢視包含進來了)
還有V$SESSION_EVENT和V$SYSTEM_EVENT檢視
分別記錄SESSION和整個系統的各個等待的相關資訊(累積的)
通過V$SESSIONI、V$SESSION、V$SQLTEXT檢視
可以查詢到某些極其消耗資源的SESSION的SQL語句

接下來,有幾個10g開始增加的新功能,之前已經做過一些功課了
保留短期歷史SESSION等待資訊的V$SESSION_WAIT_HISTORY檢視
根據此檢視,Oracle增加了ASH特性(Active Session History)
用來定時收集SESSION等待的相關資訊
而後還繁衍出AWR特性(Automatic Workload Repository)
再之後引出了ADDM特性(Automatic Database Diagnostic Monitor)
利用這些特性,可以有效分析資料庫執行狀態,並給出部分調整建議
個人用過一些篇幅進行過學習和試驗,不再累述

文章還具體介紹了部分重要等待事件
db file sequential read,資料檔案順序讀
資料庫在讀取索引或通過索引讀取資料時會發生此等待
一般情況,此等待的出現是較正常的
但某些情況,走索引反而會帶來效能損耗(如讀取的資料量過大)
db file scattered read,資料檔案分裂讀
也是較常見等待事件之一,程式讀取資料到Buffer Cache的時候,會出現此事件
通常意味著在進行全表掃描(Full Table Scan和Fast Full Scan)
direct path read/write,直接路徑讀/寫
指Oracle將資料直接寫入PGA程式或從PGA程式獲取資料直接寫入檔案,不經過SGA
容易發生在磁碟排序、並行操作等情況中
還有日誌相關等待,日誌切換log file switch,日誌同步log file sync
單獨寫日誌log file single write,併發寫日誌log file parallel write
日誌緩衝空間(不足)log Buffer Space
還有Enqueue等待,其中涉及了TM事務鎖,TX表級鎖,MR介質恢復鎖,ST空加事務鎖
表級鎖中還有以前曾經接觸過的幾種排他、共享鎖
另外還有Latch Free閂鎖釋放等待事件
Latch是Oracle內部簡單的序列鎖機制,用於保護Oracle內部的共享記憶體結構
Latch請求分兩類
willing-to-wait,不斷髮送請求直至得到Latch
immediate,獲取不到便會跳過,繼續執行後面操作
對於鎖的資訊,可以查詢V$LOCK、V$LATCH等檢視查詢

本章介紹的知識,對於優化資料庫效能有著很重要的意義
這需要建立在一定實踐經驗之上
等有事件,先檢視檢視公司的開發伺服器的執行情況
用來練練手 ^_^

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

相關文章