天天看點

statspack報告與sam配置雜記

最近這段時間剛做了一項性能優化的工作,根據一周的statspack報告,寫了一個優化

方案。

一、系統現有的主要性能問題

從最近一周比較典型的STATSPACK報告來看,系統中主要的等待事件如下:

Top 5 Timed Events

~~~~~~~~~~~~~~

Event Waits Time (s) % Total Ela Time

-------------------------------------------- ------------ ----------- ----

CPU time 5,819 46.04

wait for unread message on broadcast channel 3,356 3,374 26.70

db file sequential read 1,100,056 2,454 19.41

buffer busy waits 51,054 274 2.16

db file scattered read 154,540 220 1.74

-------------------------------------------------------------

資料庫中有46%的時間花費在CPU相關的操作上。CPU time可以分為3個部分,即CPU

time= parse time CPU + recursive CPU usage +other CPU usage,其中,parse

time CPU表示解析SQL語句所花費的CPU時間,recursive CPU usage表示一些遞歸SQL

操作花費的CPU時間,other CPU usage代表邏輯讀取花費的CPU時間。

變換一下上述公式,other CPU usage=CPU time - parse time CPU - recursive

CPU usage,将我們的STATSPACK報告的相關資料帶入該公式other CPU usage=5819-

584-109=5126,由此可見,88%的CPU時間花費在了邏輯讀取資料的操作上,另外有

10%的CPU時間花費在了解析SQL語句上。我們可以從優化SQL語句方面入手,降低邏輯

讀取。另外,我們也可以在降低SQL解析數方面做些工作。

等待事件wait for unread message on broadcast channel是一個空閑事件,我們無

須處理。

db file sequential read等待事件占總時間的19%,表示實體讀取資料,減少該等待

可以從兩個方面來考慮,首先是優化SQL,降低不必要的實體讀取;另外也可以适當的

增大資料緩沖區,使盡可能多的資料緩存到記憶體中。

另外一個等待事件buffer busy waits是由大量邏輯讀取所導緻的記憶體等待,該事件也

可以通過優化SQL語句來消除。

二、解決方案

根據系統中存在的上述問題,提出如下的優化方案:

1) 優化一些邏輯讀和實體讀較多的SQL,可以有效減少資料的讀取,也可以減少記憶體

争用;

2) 對一些執行頻繁的SQL使用綁定變量,減少花費在解析SQL語句上的CPU時間和記憶體

栓鎖;

3) 适當增大資料緩沖區尺寸,減少實體讀。

oracle10g的幾個事件解釋

http://www.itpub.net/showthread.php?s=&postid=8275075#post8275075

http://www.itpub.net/showthread.php?s=&threadid=833280

案例學習Oracle錯誤:ORA-00054

http://searchdatabase.techtarget.com.cn/tips/332/2117332_2.shtml

http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html

可以用kmtune檢視

建議用sam調整,不要通過修改檔案調整,很麻煩也很不安全,SAM方法:

#sam

回車,進入sam界面,上下箭頭調整選項,回車進入,tab鍵回菜單

--->

SAM      Kernel Configuration          ->回車進入

SAM      Configurable Parameters 回車進入調整參數界面

上下箭頭選擇參數,空格選中後按tab鍵移動光标到Actions回車出現下拉菜單,上下

鍵選中Modify Configurable Parameter...回車進入調整界面。

tab鍵移動光标,輸入新參數後,移動光标到OK,回車,有的可能提示先修改另外一個

參數。完後退出

到Actions---->Process New Kernel,等幾分鐘後會提示重起系統