Troubleshooting步驟:
Troubleshooting與IO相關的等待:
資料庫性能調優方面一項關鍵的方法就是響應時間分析。找出時間都花費在資料庫的哪些環節。
時間是性能調優中最重要的屬性。使用者通過交易或批處理任務的響應時間來感覺系統的性能。
Oracle的響應時間分析使用如下公式:
Response Time = Service Time + Wait Time
響應時間=服務處理時間+等待時間
‘服務處理時間’使用‘CPU used by this session’統計資料來衡量。
‘等待時間’則是所有等待事件用時之和。
注:盡管很像,但這個公式絕對不是排隊理論的基礎公式。
通過分析總體響應時間不同元件的相對影響,可以使用AWR或statspack這樣的工具進行性能調優,将調優的精力放到最消耗時間的元件中。
判斷IO等待事件的真實重要性:
包括AWR和Statspack在内的許多工具都可以列出最重要的等待事件。Oracle 9i R2的Statspack報告之前的版本包含在了"Top 5 Wait Events"節。
當看到這樣的top等待事件清單,通常就會很容易地開始處理這些等待事件,但往往忽視了首先可以分析下他們對總體響應時間的影響。
“Service Time”(例如CPU的使用)要遠比“Wait Time”更重要,分析這些等待事件不會對節省“響應時間”有幫助。
是以,應該将top等待事件花費的時間與“CPU used by this session”對比,将調優的精力放到最需要的地方。
從Oracle 9i R2開始,“Top 5 Wait Events”已經改名為“Top 5 Timed Events”,通過統計session所用的CPU來衡量“Service Time”,并列到“CPU time”中。這就意味着可以更容易、更準确地衡量等待事件對總體“響應時間”的影響,正确地指導接下來的調優方向。
錯誤了解等待事件的影響:執行個體
接下來的兩個真實案例說明了為什麼需要檢視“Wait Time”和"Service Time"兩部分,對分析資料庫性能的重要性。
執行個體1:Oracle 9i R2之前的Statspack
下面是産生自46分鐘的兩個snapshot之間的Statspack報告“Top 5 Wait Events”節:
從以上的清單,我們很可能傾向于立即開始查找“direct path read”和“db file scattered read”等待之間的原因,嘗試調優他們。這種方法沒有考慮到“Service Time”。
從同一份報告中得到的“Service Time”如下:
讓我們來做一下簡單的計算:
'Wait Time' = 10,827 x 100% / 52,01% = 20,817 cs
'Service Time' = 358,806 cs
'Response Time' = 358,806 + 20,817 = 379,623 cs
如果現在我們來計算所有“Response Time”元件的百分比:
現在就明顯了,與IO相關的等待事件對于總體響應時間來說并不是真正耗時的元件(少于6%),是以解析來的調優應該聚焦在服務處理時間元件上,例如CPU消耗。
執行個體2:Oracle 10i R2之後的AWR
注意:類似的資訊也會顯示在Oracle 9i R2以後的Statspack報告:
在AWR中,更容易看到CPU是最耗費時間的,因為CPU元件也包括在“Top 5 Timed Foreground Events”節。從上面的例子,我們能夠再次看到等待事件的用時少于20%,家下來的調優重點應該放在服務處理時間的元件上,例如CPU消耗。
(未完待續)