動的パフォーマンス表 V$ROLLSTAT より得た値から本番用のロールバック・セグメントに必要なサイズ を推測することができます。以下にその手順を示します。
1. あらかじめ、小さめのロールバック・セグメントを作成しておきます(OLTP 処理の場合、STORAGE 句で INITIAL 100K、NEXT 100K 程度にして、同時実行トランザクション数にあった個数を用意します)。
2. Oracle を起動します。
3. テスト運用を実施します。
このテスト運用が本番での処理に近いほど見積もりの精度が高まります。
4. テスト運用終了後、以下のコマンドを実行して、テスト運用中に必要とされたロールバック・セグ メントの最大サイズ(byte)を求めます。
SQL> SELECT MAX(HWMSIZE) FROM V$ROLLSTAT;
MAX(HWMSIZE)
‑‑‑‑‑‑‑‑‑‑‑‑
2097152
5. 次の式を用いて MINEXTENTS が 10〜30 になるように INITIAL の値を設定します。
MAX( HWMSIZE ) = INITIAL * MINEXTENTS 10 ≦ MINEXTENTS ≦ 30
ここでは MINEXTENTS を 21 として STEP4 で得た MAX( HWMSIZE )の値より INITIAL を求めてみます。
MAX( HWMSIZE ) = INITIAL * MINEXTENTS 2097152 = INITIAL * 21
INITIAL = 2097152 / 21 = 99864.4 (byte) < 100 (KB)
この結果から INITIAL = NEXT = 100KB、MINEXTENTS = 21 と決定できます。
ロールバック・セグメントの管理のまとめ
トランザクションの種類とサイズ
• OLTP系:INITIAL 100K程度を多数用意
• バッチ系:大きなロールバック・セグメントを数個用意 • 組み合わせ処理:
− すべてのロールバック・セグメントをバッチ処理に耐える大きさに設定 − 長時間実行処理だけSET TRANSACTION USE ROLLBACK SEGMENTで 大きなロールバックセグメントを指定
同時実行トランザクション数とロールバック・セグメント数
• 4つのトランザクションあたり1つのロールバック・セグメントを用意 鉄則
・1つのトランザクションは、ロールバックセグメントをまたがって使うことはできない。
・ロールバックセグメントの PCTINCREASE はつねにゼロで、変更することはできない。
・ロールバックセグメントの MINEXTENTS の最小値は2。
・ロールバックセグメントは I/O が多く、領域の確保/解放が起こりやすいので専用の表領域を確保する。
・フラグメンテーションを防止するため INITIAL と NEXT のサイズは同じにする。
・エクステントの個数を10〜30の範囲に抑えたほうがパフォーマンス上好ましい。
UNLIMITED EXTENTS
・ロールバック・セグメントには MAXEXTENTS UNLIMITED 指定をしない 動的縮小方法
・ALTER ROLLBACK SEGMENT rbs SHRINK コマンドを使用 V$ROLLSTATを使用したサイズの見積もり方法 • 本番に近いテスト運用で必要サイズを推測
4. テンポラリー・セグメントの管理
テンポラリー・セグメントは、メモリー上で処理したいデータ量が使用可能なメモリー量を超えたとき に、そのデータを一時的に格納するためのディスク領域です。そしてこのテンポラリー・セグメントを格 納する表領域を一時表領域といいます。
この領域の設定を誤ると、「ORA‑01630:一時セグメントで最大エクステント:num に達しました(表領 域:name)。」や「ORA‑01652:一時セグメントを拡張できません(:num 表領域:name)。」などのエラー が発生する可能性があります。
この章ではこれらの問題を回避するためのテンポラリー・セグメントの設定のポイントを説明します。