如何計算自動管理的UNDO表空間大小

dbasdk發表於2014-09-10

 AUTO UNDO

AUM(自動 undo 管理,Automatic Undo Management)幾乎不需要配置。您基本上只需要定義將前映像保持可用的時間量。這是透過引數 UNDO_RETENTION 控制的,以秒為單位定義。因此,值 900 表示 15 分鐘。

一定要意識到,如果 undo 表空間中存在空間壓力時,我們不保證前映象一定會保留這麼長時間。
因此,以下公式可用於計算最佳 undo 表空間大小:
從 Oracle 10g 開始,您可以選擇使用 GUARANTEE 選項,以確保在定義的 undo_retention 時間之前,undo 資訊不會被覆蓋。

UNDO表空間大小由三部分組成:
(UR)UNDO_RETENTION 單位秒
(UPS)每秒產生的undo 資料塊的個數
(DBS)資料庫資料檔案塊的大小DB_BLOCK_SIZE
計算公式
UndoSpace=UR*(UPS*DBS)
其中UNDO_RETENTION 和 DB_BLOCK_SIZE兩部分的資訊可以在例項配置引數資訊中獲取。
而第三部分UPS的資訊需要從動態效能試圖V$UNDOSTAT中獲取
下面是獲取(UPS)每秒產生的undo 資料塊的個數.
SQL> SELECT undoblks/((end_time-begin_time)*86400) "Peak Undo Block Generation"
FROM v$undostat WHERE undoblks=(SELECT MAX(undoblks) FROM v$undostat);
其中列END_TIME and BEGIN_TIME 是日期型別,需要轉換成秒(24 hours * 60 minutes * 60 seconds).

下面的SQL是計算UNDO表空間大小
SQL> SELECT (UR * (UPS * DBS)) AS "Bytes"
     FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),
          (SELECT undoblks/((end_time-begin_time)*86400) AS UPS
           FROM v$undostat
           WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),
          (SELECT block_size AS DBS
           FROM dba_tablespaces
           WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));
          
10g 和10g 更高的版本,可以使用下面的查詢:
SQL>SELECT (UR * (UPS * DBS)) AS "Bytes"
FROM (select max(tuned_undoretention) AS UR from v$undostat),
(SELECT undoblks/((end_time-begin_time)*86400) AS UPS
FROM v$undostat
WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),
(SELECT block_size AS DBS
FROM dba_tablespaces
WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));

 




2014.09.05 08:26
share you knowledge with the world. 


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1266910/,如需轉載,請註明出處,否則將追究法律責任。

相關文章