oradebug處理DB hang情況
當資料庫出現嚴重的效能問題或者hang了的時候,我們非常需要透過systemstate dump來知道程式在做什麼,在等待什麼,誰是資源的持有者,誰阻塞了別人。在出現上述問題時,及時收集systemstate dump非常有助於問題原因的分析。在一些情況下,資料庫會自動生成systemstate dump, 比如出現了"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK"
systemstate dump大部分時候需要手工生成,具體的命令為:
如果連線很多,比如幾千個連線,那麼生成dump可能需要幾十分鐘,而且會佔用幾百M磁碟空間)
1. 用sysdba登入到資料庫上:
$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==當資料庫已經很慢或者hang到無法連線
SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump systemstate 266;
等1~2分鐘
SQL>oradebug dump systemstate 266;
等1~2分鐘
SQL>oradebug dump systemstate 266;
SQL>oradebug tracefile_name;==>這是生成的檔名
2. 通常除了systemstate dump,最好同時生成hang analyze來直觀地瞭解資料庫程式間的等待關係。
$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==當資料庫已經很慢或者hang到無法連線
SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump hanganalyze 3
等1~2分鐘
SQL>oradebug dump hanganalyze 3
等1~2分鐘
SQL>oradebug dump hanganalyze 3
SQL>oradebug tracefile_name;==>這是生成的檔名
對於RAC資料庫,需要各個例項在同一時間的systemstate dump,那麼登入到任意一個例項(無需在所有例項執行):
$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==當資料庫已經很慢或者hang到無法連線
SQL>oradebug setmypid
SQL>oradebug unlimit
SQL>oradebug -g all dump systemstate 266 <==-g all 表示針對所有例項生成dump
等1~2分鐘
SQL>oradebug -g all dump systemstate 266
等1~2分鐘
SQL>oradebug -g all dump systemstate 266
在RAC上生成hang analyze:
SQL>oradebug setmypid
SQL>oradebug unlimit
SQL>oradebug -g all hanganalyze 3
等1~2分鐘
SQL>oradebug -g all hanganalyze 3
等1~2分鐘
SQL>oradebug -g all hanganalyze 3
上面的命令執行後會在每個例項都生成systemstate dump,生成的資訊放到了每個例項的backgroud_dump_dest下的diag trace檔案中。
上面的這些命令執行三次是為了比較程式的變化情況,檢視是真的hang了,還是很慢。
systemstate dump有多個級別:
2: dump (不包括lock element)
10: dump
11: dump + global cache of RAC
256: short stack (函式堆疊)
258: 256+2 -->short stack +dump(不包括lock element)
266: 256+10 -->short stack+ dump
267: 256+11 -->short stack+ dump + global cache of RAC
level 11和 267會 dump global cache, 會生成較大的trace 檔案,一般情況下不推薦。
一般情況下,如果程式不是太多,推薦用266,因為這樣可以dump出來程式的函式堆疊,可以用來分析程式在執行什麼操作。
但 是生成short stack比較耗時,如果程式非常多,比如2000個程式,那麼可能耗時30分鐘以上。這種情況下,可以生成level 10 或者 level 258, level 258 比 level 10會多收集short short stack, 但比level 10少收集一些lock element data.
另外對於RAC系統,請關注Bug 11800959 - A SYSTEMSTATE dump with level >= 10 in RAC dumps huge BUSY GLOBAL CACHE ELEMENTS - can hang/crash instances (Doc ID 11800959.8)。這個Bug在11.2.0.3上被修復,對於<=11.2.0.2的RAC,當系統中的lock element 很多的時候,如果執行level 10、266或者 267的systemstate dump時,可能會導致資料庫hang或者crash,這種情況下可以採用level 258。
下面是生成systemstate dump的測試,用來檢視每個level佔用的空間:
這個例子中有37個程式:
-rw-r----- 1 oracle oinstall 72721 Aug 31 21:50 rac10g2_ora_31092.trc==>256 (short stack, 每個程式2K)
-rw-r----- 1 oracle oinstall 2724863 Aug 31 21:52 rac10g2_ora_31654.trc==>10 (dump,每個程式72K )
-rw-r----- 1 oracle oinstall 2731935 Aug 31 21:53 rac10g2_ora_32214.trc==>266 (dump + short stack ,每個程式72K)
RAC:
-rw-r----- 1 oracle oinstall 55873057 Aug 31 21:49 rac10g2_ora_30658.trc ==>11 (dump+global cache,每個程式1.4M)
-rw-r----- 1 oracle oinstall 55879249 Aug 31 21:48 rac10g2_ora_28615.trc ==>267 (dump+global cache+short stack,每個程式1.4M)
所以,可以看出如果dump global cache(level 11和267,那麼佔用的空間比其他級別大很多
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/500314/viewspace-1123067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 處理表鎖定的情況
- ORA-00059: maximum number of DB_FILES exceeded 情況分析及實驗處理
- oradebug分析oracle hangOracle
- 在MDX中處理邊界情況
- Java程式異常處理的特殊情況Java
- xcodebuild -workspace 情況下,部分坑的處理XCodeUI
- SQL中除數為0處理情況演示SQL
- 如何處理瀏覽器的斷網情況?瀏覽器
- APM RUEI processor處理程式hang死處理方法
- Redo丟失的4種情況及處理方法
- Redo 丟失的4種情況的處理方法
- Oracle 查詢DB的負載情況Oracle負載
- 資料庫hang住,分析處理資料庫
- 哪些情況應該廢標,廢標後如何處理
- 動態sql查詢結果多行的處理情況SQL
- oracle 字符集錯誤情況處理簡單方法Oracle
- 沒有備份的情況下處理undo損壞
- Oracle 無備份情況下undo檔案損壞處理Oracle
- Laravel-admin 處理 select 有 data 鍵的情況Laravel
- FE.UX-常見CSS邊界情況防禦處理UXCSS
- os thread startup等待事件HANG處理thread事件
- sqlplus 無響應 hang處理SQL
- 一次資料庫HANG處理資料庫
- 使用oradebug dump hanganalyze分析oracle hang系列一Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列二Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列三Oracle
- jmeter問題處理隨筆1 - CSV取值資料異常處理(包含"號,","號的情況)JMeter
- 刪除臨時表空間hang處理
- SUN E6500雙機hang住處理
- 一次資料庫hang的處理資料庫
- 應用長時間未呼叫後再次呼叫出現hang的情況
- 請教Golang處理Json, 處理的是 List of Json這種情況,大家有何高見?GolangJSON
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- 第十八篇:批量處理情況下的回射客戶端客戶端
- undo表空間出現問題的幾種情況與處理
- 沒有備份的情況下如何處理logical & physical corrupt blockBloC
- 關於docker-compose up -d 出現超時情況處理Docker
- oradebug分析oracle hang或慢_sqlplus_prelimOracleSQL