通過AWR報告處理故障一次心得
故障現象
5:00-5:05期間,負載突然上升,隨機查詢程式發現來自192.168.30.69伺服器
5:05-5:10期間,把192.168.130.69應用重啟後,負載在5分鐘之內恢復正常
AWR報告資訊如下
1.併發有增加
2.硬解析很多
3.整個15分鐘期間的CPU使用率並不高(因為負載一上來就馬上去關閉應用了,所以負載滿核的時候大概就3分鐘左右,CPU核數16 *4*60=2880秒左右,比DB TIME小一點)
4.兩個SQL的CPU和其他SQL的CPU不是一個數量級的,差距10倍以上(195秒不到2880秒的十分之一)
5.某表的邏輯讀的佔用位元別突出
分析
1. 通過以上AWR的資訊,第一印象就是感覺硬解析引起的大量等待引起的CPU暴漲,查詢下來也確實發現太多沒有繫結變數的SQL,而且還發現邏輯讀高的表UF_KQ_HRANALYZE_DT2沒有繫結變數的SQL就達500多條。自以為找到了原因,通知開發去繫結變數(從DBA的角度看,一般不建議改引數cursor_sharing值,怕引發其他問題)。
2. 誰知第二天負載又開始上來,不過不是5分鐘內暴漲,而是爬升(30分鐘內從30%達到100%狀態),期間資料庫連上去可以抓取耗CPU百分百程式SPID對應的SQL了(昨天暴漲,資料庫都連不上),發現SQL就是昨天AWR報告裡面的那段insert的SQL,細查下來發現insert那段就是share_fordoc儲存過程裡面的一部分。再抓取幾分鐘內的AWR報告(顯示insert居然78分鐘都沒有跑完),AWR報告中TOP SQL和抓取CPU百分百程式SPID對應的SQL一致。就是insert那段SQL慢導致整個儲存過程慢,insert慢要麼是insert的資料量太大或IO太慢,要麼是insert後面的select太慢,具體查下來發現insert後面的select有死迴圈,至此找到原因,通知開發修改程式,徹底搞定。
抓取SPID對應的SQL的語句如下
select s.sid,s.serial#,p.spid,s.terminal,s.LOGON_TIME,s.status,s.PROGRAM,s.CLIENT_IDENTIFIER,s.machine,s.action,s.PROCESS
"客戶端機器程式號",s.osuser from v$session s,v$process p where s.paddr=p.addr and p.spid=XX
select username,sid,SERIAL#,LOGON_TIME,status,PROGRAM,CLIENT_IDENTIFIER,machine,action,PROCESS "客戶端機器程式號",osuser,sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value and a.sid=&sid order by piece;總結
1. 資料庫出現效能問題,一般都在三個地方,io,記憶體,cpu,這三個又是息息相關的,當io負載增大時,肯定需要更多的記憶體來存放,同時也需要cpu花費更多的時間來過濾這些資料,相反,cpu時間花費多的話,有可能 是解析sql語句,也可能是大量邏輯讀過濾太多的資料,到不一定是和io或記憶體有關係
2. 有的時候等待事件是最好的入手點,但是引發等待事件的原因有很多,遇到突然異常的情況下,最簡單粗暴的方法還是去看TOP SQL,看哪些SQL特別突出
3. 出現異常苗頭時,一定要及時去建立快照,抓取短暫的5分鐘或10分鐘都可以,檢視這幾分鐘內的AWR基本都可以定位到故障。一旦資料庫hang住了,1小時的預設自動建立快照動作都不會執行的,這樣後續故障現象的一手資料都會拿不到
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2136914/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【AWR】Oracle批量生成awr報告指令碼Oracle指令碼
- 【故障處理】ORA-600:[13013],[5001]故障處理
- linux故障處理Linux
- 故障分析 | Greenplum Segment 故障處理
- AWR報告基礎操作
- 不停機處理oracle超過最大processes數故障Oracle
- GPON網路故障如何處理?GPON網路故障處理流程
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- 記一次一波三折的Mysql故障處理MySql
- dpdk-lvs的一次線上故障排查報告
- MySQL show processlist故障處理MySql
- 微服務的故障處理微服務
- Oracle更新Opatch故障處理Oracle
- teams登入故障處理
- 一次壞塊的處理過程(一)
- 一次壞塊的處理過程(二)
- 記一次ceph pg unfound處理過程
- 線上MYSQL同步報錯故障處理方法總結MySql
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- Oracle生成awr報告操作步驟Oracle
- 記一次一波三折的Oracle RAC故障處理Oracle
- ORACLE AWR效能報告和ASH效能報告的解讀Oracle
- 一次併發處理過程, 基於 RedisRedis
- 記一次PMML檔案的處理過程
- awr-----一份經典的負載很高的awr報告負載
- 線上故障處理手冊
- awr報告每天自動生成指令碼指令碼
- 12.2 如何單為PDB建立AWR報告
- 報告:明智地處理廣告浪費
- 記一次linux主機中病毒處理過程Linux
- 一次線上問題處理過程記錄
- 詳述一條SQL引發的高CPU故障處理過程SQL
- 基線,移動視窗,AWR學習心得
- 【故障處理】TNS-04610問題
- GaussDB(分散式)例項故障處理分散式
- Oracle 10g RAC故障處理Oracle 10g
- ORA-01591錯誤故障處理
- 如何處理HTTP 503故障問題?HTTP
- Oracle 11.2.0.4 Dataguard兩則故障處理Oracle