UNDO表領域適正サイズ見積もり
11.1.0.7.0 以降のリリースに対応
select (((UR * UPS +
(select 127 + (max(MAXCONCURRENCY)) * 2 from v$undostat)
) * DBS)/1024)/1024 AS"UNDO SIZE(MB)" from
(select value UR from v$parameter where name = 'undo_retention'),
(select (SUM(undoblks)/SUM((end_time-begin_time) * 86400)) UPS from v$undostat),
(select value DBS from v$parameter where name = 'db_block_size');
V$UNDOSTATから、以下の情報を取得する。
・undoblks
・maxquerylen
それから、以下の値も。
・1ブロックのバイト数
特にいじってなければ、デフォルトは8192バイト。
1秒あたりUNDOブロック生成数 × UNDO保存期間(秒) × ブロックサイズ
を計算する。
V$UNDOSTATは10分ごとに更新されるから、1秒当たりのUNDOブロック生成数は、(undoblks / 600)となる。
なので、上記の式にあてはめると
(undoblks / 600) × maxquerylen × 8192
ここで求められた値が、UNDO表領域に必要なサイズ(概算)となる。
当然、バイトなんで1024で適度に除算してMBでもGBでも求めればよい。