之前是 CPU 持續使用率變高的問題,但根本的原因可能是其他問題,比如記憶體被用爆了,造成系統強制啟用 GC讓 connection 一直在排隊, CPU一直在忙錄,使用者一直在等待,如果你跑了 performance script 檢示相關資訊也調整了相關參數還是沒有用的話,可以檢示 indexserver.trc
indexserver.trc 出現 Reason for shrink訊息,可能是單一 sql 的效率問題,可以利用 StatementHash or StatementExecutionID 去 DB 查詢 sys view M_EXPENSIVE_STATEMENTS 找到對應的 sql並利用 explain plan 去檢示寫法是否有問題並修正。
以這一次經驗來說,發現系統導入顧問的一個 view 寫法很有問題,原本可以用 max + group by 的方式找出最新一筆的資料,但他徧徧用 row_number + where rownum =1 的方式寫,這種寫法就是把 db 給搞掛了的元兇,而且是開了好幾次 case 請顧問查看此問題但卻一直沒有發現。
沒有留言:
張貼留言