Oracle程式導致CPU 100%解決步驟(轉)

ba發表於2007-08-15
Oracle程式導致CPU 100%解決步驟(轉)[@more@]  1-- 檢查系統
  sar -u 5 5
  2-- 看誰在用CPU
  topas
  ps -ef |grep ora #檢查第四列,C的大小(unit,100 per cpu)
  3-- 檢查CPU數量

  /usr/sbin/bindprocessor -q

  lsattr El proc0

  4-- 2種可能:

  1) A Background (instance) process

  2) An oracle (user) process #此種可能最大。

  5-- 如果是使用者程式:那麼高CPU的主要原因有:

  Large Queries, Procedure compilation or execution, Space management and Sorting

  5.1-- 檢視每個Session的CPU利用情況:

select ss.sid,se.command,ss.value CPU ,se.username,se.program from v$sesstat ss, v$session se where ss.statistic# in (select statistic# from v$statname where name = 'CPU used by this session') and se.sid=ss.sid and ss.sid>6 order by ss.sid


  5.2-- 比較上述Session,看那個session的CPU使用時間最多,然後檢視該Session的具體情況:

select s.sid, event, wait_time, w.seq#, q.sql_text from v$session_wait w, v$session s, v$process p, v$sqlarea q where s.paddr=p.addr and s.sid=&p and s.sql_address=q.address;


  5.3-- 得到上述資訊後,檢視相應操作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那麼必須建立相應的Index或者檢查Index是否有效。

  另外必須檢查是否有並行的查詢存在和同一時刻有多個使用者在執行相同的SQL語句,如果有必須關閉並行的查詢和任何型別的並行提示(hints);如果查詢使用intermedia資料,那麼為了減少總的Index大小,必須限制使用Intermedia的Worldlist。(try restricting the wordlist that intermedia uses to help reduce the total indexsize)。

  6-- 上述方案只能根據已經執行完成的操作,對於正在執行的長時間操作只能等操作完成後才能檢測得到。因此我們可以透過另外一個很好的工具來檢測正在執行的長時間操作語句。v$session_longops,這個檢視顯示那些操作正在被執行,或者已經完成。每個process完成後會重新整理本檢視的資訊。

  7-- 怎樣尋找集中使用CPU的Process:

  很多時候會發現有N個Process在平均分享著CPU的利用率,這種情況唯一的可能性就是這些Process在執行著相同的Package或者Query.

  這種情況:建議透過statspack,在CPU高利用率額時候執行幾個快照,然後根據這些快照檢查Statspack報告,檢查報告中最TOP的 Query。然後使用 sql_trace and tkprof 工具去跟蹤一下。同時檢查buffer cache 的命中率是否大雨95%。

  同時在報告中還需要檢查一下table scans (long tables),看是否在報告生成期間有存在全表掃描。

  8-- 另外還有一些不是特別重要的,但是也必須關心檢查的引數可能消耗CPU。

  parallel query 並行查詢:

  並行查詢最好用於資料倉儲的環境下,那種情況任何時候只有幾個使用者在同時使用。在一個聯機事務處理環境中,當同時許多使用者去並行查詢一個資料庫的巨大表時候,會導致CPU的爆滿。所以最好在資料庫的級別關閉並行查詢:設定引數如下:

parallel_min_server = 0 parallel_max_server = 0 parallel_automatic_tuning = false;


  在配置上述引數後,如果SQL語句中使用的並行的提示,那麼還是有可能會出現並行查詢的情況,所以還需要繼續監視相關的SQL語句,如果有就去除提示,以達到目的。

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

相關文章