Master Note: High Undo Space Usage (文檔 ID 1578639.1)
IF: High Undo Tablespace Space Usage Without any Active Transactions (文檔 ID 1951404.1)
IF: High Undo Tablespace Space Usage due to Active Transactions (文檔 ID 1951403.1)
Undo Remains Unexpired When Using Non-autoextensible Datafiles For The Undo Tablespace (文檔 ID 1112431.1)
AUM Common Analysis/Diagnostic Scripts (文檔 ID 877613.1)
What is the Undo Advisor and how to Use it through the DBMS_UNDO_ADV package (文檔 ID 1580225.1)
Script - Check Current Undo Configuration and Advise Recommended Setup (文檔 ID 1579035.1)算法
ACTIVE
:還有活動事務在使用 undo。這部分空間屬於暫時不能使用的空間。EXPIRED
:考慮到 undo retention 以後,這些 undo 已通過期了。這部分空間是能夠重用的。UNEXPIRED
:考慮 undo retention 以後,這些 undo 尚未過時,可是已經沒有活動事務在使用了。在超過 undo retention 以後,這部分空間會變成 expired 狀態,而後就能夠重用了。sql
SQL> SELECT SUM(BYTES)/1024/1024/1024 FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME='APPS_UNDOTS1'; SUM(BYTES)/1024/1024/1024 ------------------------- 11.6328125 SQL> select sum(bytes /(1024*1024)) from dba_undo_extents where status='EXPIRED'; SUM(BYTES/(1024*1024)) ---------------------- 1.0625 SQL> select sum(bytes /(1024*1024)) from dba_undo_extents where status='ACTIVE'; SUM(BYTES/(1024*1024)) ---------------------- 1968.125 SQL> select sum(bytes /(1024*1024)) from dba_undo_extents where status='UNEXPIRED'; SUM(BYTES/(1024*1024)) ---------------------- 146186.75
SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 SQL> select max(maxquerylen),max(tuned_undoretention) from v$undostat; MAX(MAXQUERYLEN) MAX(TUNED_UNDORETENTION) ---------------- ------------------------ 70504 119636
從上面結果能夠看出,數據庫根據算法計算出來的最大TUNED_UNDORETENTION要比最大MAXQUERYLEN大不少,上面看到的undo表空間使用,是UNEXPIRED類型佔用了絕大部分的空間。undo表空間中的數據通過TUNED_UNDORETENTION以後纔會由UNEXPIRED變成EXPIRED。TUNED_UNDORETENTION的優化,參考metalink上的文章Undo Remains Unexpired When Using Non-autoextensible Datafiles For The Undo Tablespace (文檔 ID 1112431.1)進行,設置undo表空間中數據文件的擴展參數(即打開數據文件的auextend 開關,但設置數據文件的maxsize爲數據文件的當前大小)。數據庫
大體的步驟以下:session
SQL> ALTER DATABASE DATAFILE '<datafile_flename>' AUTOEXTEND ON MAXSIZE <current_size>;
SELECT S.USERNAME, S.SID, S.SERIAL#, S.LOGON_TIME, s.SQL_ID, T.XIDUSN, T.UBAFIL, T.UBABLK, T.USED_UBLK, T.START_DATE, T.STATUS FROM V$SESSION S, V$TRANSACTION T WHERE S.SADDR = T.SES_ADDR ORDER BY t.USED_UBLK DESC ;