線上重定義造成某核心OLAP系統資料庫無規律間歇性重啟
愜意的週末
今天週六,睡到自然醒,西安難得的古都藍,溫暖的陽光,一個愜意的週末,star童鞋正在焦急的等待最喜歡的西安美食之一”肉丸胡辣湯”。。。。突然電話響了,某核心BOSS系統資料庫異常,需要緊急支援,star童鞋火速趕往現場ing……….
詭異的回憶
與現場工程師溝通了解現場情況,
場景一:昨天週五15:50,業務監控系統報警,某核心BOSS系統短暫異常,現場工程師檢視時系統各項指標均正常(包括主機CPU、記憶體、資料庫叢集情況、日誌等)。
場景二:昨天週五22:45,業務監控系統報警,某核心BOSS系統短暫異常,敬業高尚的現場工程師於23:50分叫車趕到現場,經確認一切,系統各項指標均正常(包括主機CPU、記憶體、資料庫叢集情況、日誌等)。–涇渭湖邊的水,平靜的像一面鏡子,沒有一絲波瀾。
場景三:今天週六 6:20,業務監控系統再次報警,某核心BOSS系統短暫異常
是監控系統調皮(誤報),還是資料庫任性(異常),這是個問題,大家都很迷茫?
清澈的分析
在這個萬分緊急的關頭,一道白光閃過,star童鞋登場了,大家都看到了希望,下來上乾貨。。。。
檢視所有異常時間點
資料庫歷史會話
select * from dba_hist_active_sess_history y where y.sample_time >= trunc(sysdate)+13/24
and y.sample_time <= trunc(sysdate)+16/24;
發現15:50資料庫存在大量活動重建索引程式
sql_1:
begin
dbms_redefinition.start_redef_table('ht', 'my_home', 'family');
end;
注:該語句為線上重定義指令碼。
sql_2:
透過檢視歷史會話表中,MACHINE、PROGRAM欄位,鎖定異常起因。
MACHINE PROGRAM
--------------- ------------
B工程師的電腦 plsqldev.exe
經與BI工程師溝通其在昨天15點左右有做過線上重定義操作,昨天22點及今天早上6點沒有任何操作。
繼續檢視SQL_3:
注:批次重建索引語句,由於top_level_sql_id相同,所以為sql_1產生的子程式。
WORD天這條重建索引的語句在幹嘛!!!!
該語句有以下兩個隱患:
-
正常重建索引語句:alter index “ht”.”PK _ht _LOG”rebuild parallel N(N為需要並行執行的程式數),該語句未設定並行度N,此時的並行度是:伺服器CPU數*每個CPU啟用的執行緒數,該伺服器210個CPU執行緒(2結點RAC,210*2個執行緒)因此以上條語句同時啟動420個程式,造成伺服器CPU使用率100%,資料庫服務異常。
-
該索引重建完成後,索引並行度為”default”
週五 15點的問題已經分析清楚了,但週五22點和週六6點又是什麼原因呢?star童鞋繼續分析ing…..
檢視週五22點和週六6點資料庫AWR報告
由上看出,引起並行查詢等待的sql為
select /*+ parallel_index(t, "PK_ht_LOG", 999) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_substrb_pad no_expand index_ffs(t, "PK_ht_LOG") */ count(*) as nrw, count(distinct sys_op_lbid(1262391, 'L', t.rowid)) as nlb, null as ndk, sys_op_countchg(substrb(t.rowid, 1, 15), 1) as clf from "ht"." ht_LOG " sample block ( .6116619100, 1) t where "READ_ID" is not null。
該sql使用hint強制並行操作,WORD天999。
由上可以看出DBMS_SCHECULER中的job(ORA$AT_OS_OPT_SY_2476)佔據了97.25%的服務。而該scheculer呼叫的就是上面的並行查詢語句。
原因已經很明顯。資料庫統計分析任務,週五晚上10點、週六早上6點,該排程程式呼叫的sql使用並行查詢(索引預設並行度999),耗盡了cpu,導致資料庫異常。
問題回溯:
場景1: 15:30分業務人員執行線上重定義,ORACLE線上重定義(業務表1億資料量),重建索引alter index index_name rebuildparallel使用系統預設並行度,並行度較高,造 成資料庫異常,此時該索引degree為default。
場景2:週五晚上10點資料庫定時統計任務啟動,使用索引degree(default)資料庫服務異常。
場景3:週六早上6點資料庫定時統計任務啟動,使用索引degree(default)資料庫服務異常。
場景4:star童鞋經過深入分析後,執行一條命令問題解決。
簡潔的方案
Alter index index_name noparallel;
–你要的乾貨。
忠誠的建議
-
排查表和索引degree並行度,將並行度不為1的改為並行度為1(noparallel)。
-
將度行度列入自動化監控列表,及時發現問題。
-
修改引數parallel_max_servers在可控範圍。
愜意的週末已過去大半,我最喜歡的古都美食之一”肉丸胡辣湯”還熱氣騰騰的等待star同學歸來。。。。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2137456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫表的線上重定義資料庫
- 線上重定義引起的資料庫掛起資料庫
- oracle 線上重定義Oracle
- Oracle線上重定義Oracle
- oracle 表線上重定義Oracle
- oracle表線上重定義Oracle
- 【Oracle】線上重定義表Oracle
- 如何確定一個嚴重規範化的資料庫系統?資料庫
- 海量資料處理_表分割槽(線上重定義)
- 摘自_老楊大師_線上重定義引起的資料庫掛起資料庫
- Oracle的線上重定義(轉)Oracle
- Online Redefinition線上重定義(三)--多表關聯重定義案例
- Oracle表的線上重定義(一)Oracle
- oracle線上重定義表步驟Oracle
- dbms_redefinition線上重定義表
- 10g線上重定義新特性——對單獨的分割槽進行線上重定義
- RAC資料庫重啟案例資料庫
- 一則資料庫無法重啟的案例分析資料庫
- 物化檢視prebuilt和線上重定義UI
- Oracle線上重定義之DBMS_REDEFINITIONOracle
- Online Redefinition線上重定義(一)
- Oracle中重建表的線上重定義Oracle
- 利用DBMS_REDEFINITION線上重定義表
- 線上重定義表ORACLE 11GOracle
- 【redefinition】線上重定義概覽與使用
- NOLOG方式重啟資料庫資料庫
- Oracle Online Redefinition線上重定義(上)Oracle
- Oracle Online Redefinition線上重定義(中)Oracle
- Oracle Online Redefinition線上重定義(下)Oracle
- 【TABLE】oracle表線上重定義注意事項Oracle
- oracle實驗記錄 (線上重定義表)Oracle
- android中自定義屬性重複定義Android
- 由AIX系統故障導致系統重啟,使Oracle資料庫自動啟動例項AIOracle資料庫
- oracle 9i線上重定義功能應用於生產庫Oracle
- 系統表空間資料檔案丟失,無備份,無重啟,通過控制程式碼恢復
- 在oracle 9i下線上重定義表Oracle
- DBMS_REDEFINITION(線上重定義一個重要bug)
- 普通錶轉換分割槽表-線上重定義