CPU主要功能:處理指令、執行操作、要求進行動作、控制時間、處理資料,
結合資料庫實體CPU占用高,可能的原因是資料庫在執行大量的操作(全表查詢、大量排序等),
由于公司沒有DBA,遇到資料庫問題只能自己排查,
一、是否存在死鎖
查詢死鎖以及解鎖的陳述句參考下方:- 查看死鎖ID
- 查看表名稱
- 手工關閉死鎖
二、借助PLSQL查詢定時job和session
通過PL/SQL查詢到,不存在定時的JOB執行, 通過Tools-Sessions,發現存在較多資料庫連接與訪問,但較難定位到具體那個sql或表存在問題, 于是,Kill了所有Session,CPU得到緩解,但根本原因未查到,隔幾分鐘又反復了,三、查詢資料庫中的等待事件
SELECT P.PID,
S.SID,
S.SERIAL#,
S.USERNAME,
Q.SQL_ID,
Q.SQL_TEXT,
Q.SQL_FULLTEXT,
W.EVENT,
W.WAIT_TIME,
W.STATE,
CASE
WHEN W.STATE = 'WAITING' THEN
W.SECONDS_IN_WAIT
WHEN W.STATE = 'WAITING KNOWN TIME' THEN
W.WAIT_TIME
END AS SEC_IN_WAIT
FROM V$SESSION S, V$SESSION_WAIT W, V$SQLAREA Q, V$PROCESS P
WHERE S.SID = W.SID
AND S.SQL_ID = Q.SQL_ID
AND P.ADDR = S.PADDR
AND W.EVENT NOT LIKE 'SQL*Net%'
AND S.USERNAME IS NOT NULL
AND W.WAIT_TIME >= 0
ORDER BY W.WAIT_TIME DESC;
發現存在等待事件,分析待執行的SQL發現存在多表(百萬資料)全量關聯查詢,
于是對資料以及SQL進行了相應優化,CPU占用較高問題得到根本解決,
四、程序總結
造成CPU暴增的原因有很多,思路也有很多,后續如果遇到可以參考上述思路,精準定位到問題并進行優化,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/18399.html
標籤:Oracle
