Undo回滾段中 Unexpired Block遲遲不釋放掉,占用90%以上的undo表空間.
導致數據庫事務等待嚴重. DML運行異常緩慢. JOB運行也有ora-01555錯誤.
詳細詢問了下UNDO表空間的具體設置,如下:
1、undo_retention=3600;
2、未設置表空間的retention guarantee;
3、UNDO表空間設置為非自動擴展;
4、數據庫版本11.2.0.1.0
oracle給了個參數,"_smu_debug_mode" = 33554432,改到系統中,報出一大堆ORA-01555,趕緊改了回來。
莫非是碰到bug了?查了下,在oracle 10.2.0.2-3,確實有個很類似的bug:5387030。
正常情況下,如果undo 表空間被設置為固定大小,不自動擴展,oracle會啟用Automatic Tuning of undo retention特性。
啟用Automatic Tuning of undo retention時,oracle會忽略undo_retention的設置,根據undo表空間大小、系統負載情況,自動調整undo_retention為一個合適的值。這個值一般會大于“所有事務的最長運行時間”。
10gR2的bug現象為,只要設置了undo表空間自動管理,不管有沒開自動擴展,不管undo_retention設置為多少,都會啟用 Automatic Tuning of undo retention的新特性。
這個bug的解決辦法:
10.2.0.2/10.2.0.3有相應的patch,這個bug在10.2.0.4中已經修復,建議找時間停機打patch
設置隱含參數_smu_debug_mode=33554432,將tuned_undoretention取值算法修正為max(maxquerylen secs + 300,undo_retention )
設置隱含參數_undo_autotune=false,關閉自動undo retention調整特性
在10.2.0.4及以后,這個bug就修復了。朋友那問題,肯定不是這bug引起的。
在查閱這bug時,發現Automatic Tuning of undo retention的啟用條件,與朋友那完全吻合,莫非這跟Automatic Tuning of undo retention有關。
查了下官方文檔,確實如此。
系統查了下,果然,undo_retention被自動調整了:
最后總結下,呵, 在oracle 10.2.0.4,oracle11g里面,如果碰到undo使用率100%,不釋放的問題。不建議再通過調整隱藏參數來解決undo占用率高的問題。
更推薦設置undo空間的自動擴展 + 限制文件最大大小的方式來解決。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。