oracle_CPU佔用率高時的問題定位

tonyzhou_cn發表於2012-10-10

監控cpu的使用率
透過topas、nmon、vmstat 等工具監控cpu的使用率:

問題定位
透過等待事件定位:
這種情況在作業系統級別看有大量佔cpu 高的程式。
1、查詢資料庫中session的等待情況:
SELECT event, COUNT(9) FROM v$session GROUP BY event;
注意事件為 latch free,cache buffer chains,shared pool,buffer busy wait等分組的數量,這些事件會消耗大量cpu。

2、查詢有問題的session正在執行的sql語句:
SELECT sql_id, COUNT(9)
  FROM v$session
 WHERE event = 'latch free'
 GROUP BY sql_id;

檢視每個sql語句被多少個session在執行,定位問題是否是sql語句的大量執行引起的。
3、檢視詳細sql:
SELECT sql_fulltext FROM v$sql WHERE sql_id = '';

透過後臺程式號定位:
這種情況在作業系統級別看有一個或兩個持續佔cpu 高的程式。
1、透過topas檢視程式號(spid)

2、透過spid 取得相關聯的session
取得paddr進行關聯
Select addr from v$process where spid=5525626;

Select USERNAME,status,osuser,machine,terminal,program,module,sql_id,event from v$session
Where padd=’07000003395E8F40’;

Event 為等待事件,重點關注

3、檢視session的等待事件、執行語句、呼叫模組等資訊

SELECT sql_fulltext FROM v$sql WHERE sql_id = '';

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

相關文章