DBA必備技能:資料庫掛起時進行轉儲分析診斷案例
在上周末培訓中,有同學問起:如何在資料庫掛起時進行診斷和分析?這裡就是這樣一個案例。分析、深入,解資料庫之疑難。
在 Oracle 資料庫的運行過程中,可能會因為一些異常遇到資料庫掛起失去響應的狀況,在這種狀況下,我們可以通過對系統狀態進行轉儲,獲得跟蹤文件進行資料庫問題分析;很多時候資料庫也會自動轉儲出現問題的進程或系統信息;這些轉儲信息成為我們分析故障、排查問題的重要依據。
本章通過實際案例的詳細分析,講解如何逐層入手、層層剖析的分析資料庫故障。
1.1 狀態轉儲的常用命令
當資料庫出現一些掛起狀態時,往往會嚴重影響到資料庫使用,進程級的問題影響範圍較小,而系統級的問題則會影響全局。
在出現資料庫系統或進程失去響應時,如果 SQL*Plus 工具仍然可以連接,可能視圖查詢沒有相應,但是可以通過 oradebug 工具來進行進程及系統狀態信息的轉儲,從而可以進行 Hang 分析。
DUMP 進程狀態可以使用:
alter sessions set events immediate trace name processstate level ;
或者使用:
oradebug setmypid
oradebug ulimit
oradebug dumpprocessstate
當診斷資料庫掛起時,可以使用 DUMP 命令轉儲整個系統狀態:
altersessions set events immediate trace name systemstate level ;
或:
oradebugsetmypid
oradebugulimit
oradebugdump systemstate
如果為了獲取全面一點的信息,可以使用 Level 10。
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug dump systemstate 10
另外如果系統掛起,無法用 SQL*Plus 連接,從 Oracle 10g 開始,可以使用 sqlplus -prelim 選項強制登錄,然後即可進行系統狀態信息轉儲:
sqlplus -prelim / as sysdba
oradebug unlimit;
oradebug dump systemstate 10
1.2 WAITED TOO LONG FOR A ROW CACHEENQUEUE LOCK! 案例
在一次客戶現場培訓中,客戶提出一個系統正遇到問題,請求我協助診斷解決,理論聯繫實踐,這是我在培訓中極力主張的,我們的案例式培訓業正好遇到了實踐現場。
問題是這樣的:
此前一個 Job 任務可以在秒級完成,而現在運行了數小時也無法結束,一直掛起在資料庫中,殺掉進程重新手工執行,嘗試多次,同樣無法完成。
客戶的資料庫環境為:
Oracle Database 10gEnterprise Edition Release 10.2.0.3.0 - 64bit Production
With thePartitioning, OLAP and Data Mining options
介入問題診斷首先需要收集數據,我最關注兩方面的信息:
1. 告警日誌文件,檢查是否出現過異常
2. 生成 AWR 報告,檢查資料庫內部的運行狀況
通常有了這兩部信息,我們就可以做出初步判斷了。
檢查資料庫的告警日誌文件,我們發現其中出現過一個如下錯誤:
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUELOCK! > WAITED TOO LONG FOR A ROWCACHE ENQUEUE LOCK! pid=212
System State dumped to trace file/opt/oracle/admin/eygle/udump/eygle_ora_2123.trc
分析這一類的轉儲文件,可以幫助我們快速定位和找到問題的根源。有些時候,在系統出現異常掛起或莫名的性能問題時,也可以通過手工轉儲來獲得系統的狀態信息輸出,幫助我們進行資料庫性能數據收集,進而分析可能的原因。
而通過這樣的 DUMP 文件,輔助我們上一節提到的 ass109.awk 腳本,則可以很容易的同一般用戶進行遠程的診斷和故障處理,以下是一個朋友在系統出現 Hang 住掛起時轉儲的狀態文件分析,通過分析結果我們可以清晰的判斷是歸檔的原因導致了系統出現 Library Cache Lock 和 Buffer Busy Waits 等等待:
通過這個簡單的分析結果,再結合原始跟蹤文件分析,非常有助於我們理解 Oracle 資料庫的的等待事件以及內部工作原理。
加入"雲和恩墨大講堂"微信群,參與討論學
關注公眾號,獲得後續精彩分享
※開發者自述:我是如何理解決策樹的
※如何優雅的使用 Vim
※深入理解 FastCGI 協議以及在 PHP 中的實現
※马化腾VS朱啸虎:自爆微信支付数据妥不妥当?
※Pyenv 使用筆記
TAG:推酷 |
※如何對分散式 NewSQL 資料庫 TiDB 進行性能調優
※進行P2P理財必備的三項技能
※AI賦能 手機智慧化轉型進行時
※ACEMD之利用HTMD進行配體結合分析
※MATLAB採集手機內置感測器數據進行實時演算法設計的方法
※手機鈕一按,銀行可對資產配置進行智能化診斷和點評
※MELISA設備可利用智能手機進行生物醫學測試
※美研究者開發能夠利用智能手機進行生物醫學測試的MELISA設備
※價值投資?如何進行資產配置
※P2P網貸備案進行時 律合金融踐行合規衝刺備案
※穩定胸痛患者通過高危斑塊檢測進行危險分層——PROMISE研究二次分析
※MIT又出黑科技 為植入式醫療設備進行無線充電
※NASA將進行無人機空域集成技術驗證試驗
※ACEMD入門:利用HTMD進行項目實踐
※如何使用Ensembl資料庫對基因變異進行分類
※用腦電波控制智能假肢:如何利用深度學習技術進行EGG數據分類
※將DOC文件格式轉換成PDF文件格式,並進行許可權設置
※NASA摺疊機翼成功進行縮比飛行試驗
※NASA分散式電力推進系統電動飛機即將進行首飛
※Coicheck官方:技術問題已解決 現已恢復部分加密貨幣交易;僅不到2%消費者使用加密貨幣進行網上購物