通過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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【故障處理】一次RAC故障處理過程
- 一次dataguard故障處理
- awr報告中顯示enq: TM - contention 處理方法ENQ
- 一次TM ENQ故障處理ENQ
- 通過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 無線網路技巧:WiFi故障處理心得WiFi
- wait等待事件及其處理方法 awr top5 報告AI事件
- 一次direct path read 故障處理
- 一次ORA-600故障的處理
- 遠端通過監聽連線報ORA-01034故障處理一例
- 【AWR】通過AWR報告中記錄的 SQL Id獲得SQL語句的執行計劃SQL
- HSG80故障處理過程
- 記一次dg故障的處理總結
- Oracle生成awr報告Oracle
- AWR解析報告分析
- mysql-awr報告MySql
- Oracle 生成awr報告Oracle
- oracle效能awr報告Oracle
- AWR報告分析之二:ges inquiry response 過高UI
- WCDMA測試庫故障處理過程
- oracle小知識點5--通過dbms_workload_repository.awr_report_html產生awr報告OracleHTML
- 【WebLogic故障處理】一次嚴重的WebLogic記憶體洩漏問題處理過程Web記憶體
- 【AWR】Oracle批量生成awr報告指令碼Oracle指令碼
- 一次awr報告分析(密碼錯誤引發sql執行時間過長)密碼SQL
- AWR報告分析之二:ges inquiry response 過高-eygleUI
- AWR報告基礎操作
- 手工生成AWR分析報告
- Oracle AWR報告大綱Oracle
- oracle 產生awr 報告Oracle
- oracle AWR報告提取分析Oracle
- 線上MYSQL同步報錯故障處理總結MySql
- MongoDB故障處理MongoDB
- 故障分析 | Greenplum Segment 故障處理
- 【AWR】自動生成AWR報告指令碼以及用法指令碼
- 線上MYSQL同步報錯故障處理方法總結MySql
- 【故障處理】 DBCA建庫報錯CRS-2566
- 不停機處理oracle超過最大processes數故障Oracle
- [zt]Logical standby同步故障的處理過程