UNDO表領域適正サイズ見積もり

軍鶏/ 7月 7, 2020/ 未分類

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でも求めればよい。

Share this Post