Oracle程式導致CPU 100%解決步驟(轉)
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語句,如果有就去除提示,以達到目的。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux字符集不統一導致亂碼的解決步驟(轉)Linux
- 解決伺服器 CPU 佔用 100% 導致 PHP-fpm 程式假死問題伺服器PHP
- 解決new Thread().Start導致高併發CPU 100%的問題thread
- 解決Oracle死鎖問題步驟Oracle
- CPU佔用100%原因及解決方法 轉載
- 解決問題的8個步驟-轉載
- Oracle10.2.0.3 fox aix 上 In memory undo latch導致高CPU佔用問題解決OracleAI
- vmware-vmx.exe程式CPU佔用率100%解決方法
- win10系統提示dcom遇到錯誤1068導致當機的解決步驟Win10
- CPU持續100%分析並解決
- Linux伺服器發現挖礦病毒(crypto和pnscan)導致CPU爆滿100的詳細解決方法Linux伺服器
- oracle的臨時表空間解決問題的步驟Oracle
- php對外發包解決方案(導致w3wp.exe很佔cpu)PHP
- latch:cache buffers chains解決步驟AI
- oracle 啟動 關閉步驟詳解Oracle
- win10藍屏100%不重啟如何解決 win10藍屏100%不重啟的解決步驟Win10
- 10053事件處理步驟事件
- Oracle中SQL語句解析的步驟(轉)OracleSQL
- Oracle核心資料庫由於大量的latch free導致CPU資源耗盡的現場解決過程Oracle資料庫
- cpu佔用率100%怎麼解決 cpu佔用率高怎麼辦
- Oracle重建awr步驟Oracle
- oracle 安裝步驟Oracle
- oracle升級步驟Oracle
- ORACLE啟動步驟Oracle
- ORACLE資料庫閃回步驟詳解Oracle資料庫
- Win10系統安裝中文IME導致CPU佔用率過高的解決方法Win10
- 程式猿是如何解決SQLServer佔CPU100%SQLServer
- SAP 補丁升級步驟詳解 (轉)
- JavaScript 轉換步驟JavaScript
- 阿里簡訊回執.net sdk的bug導致生產服務cpu 100%排查阿里
- aix上跑oracle,swap頻繁導致hdisk100%繁忙AIOracle
- 異常等待事件Resmgr:Cpu Quantum導致CPU利用率高事件
- 時區錯誤導致oracle的EM不能啟動解決辦法Oracle
- CAS導致的ABA問題及解決
- Oracle Database 11g 環境搭建--先決步驟OracleDatabase
- WindowsXP系統CPU使用率100%解決辦法Windows
- ORACLE重建OEM的步驟Oracle
- Oracle DataGuard切換步驟Oracle