15.11.2 使用中空きページの再利用
(1) 使用中空きページの解放
バッチジョブなどで表データを大量に削除すると,その表データを格納しているページ(データページ)の一部が使用中空きページになることがあります。また,インデクスを定義している場合は,インデクスのキー値を格納しているページ(インデクスページ)の一部が使用中空きページになります。空きページ解放ユティリティ(pdreclaimコマンド)を実行すると,この使用中空きページを未使用ページ化して再利用できます。これを使用中空きページの解放といいます。使用中空きページの解放を次の図に示します。
- ポイント
-
-
LOB用RDエリアに格納されているデータの使用中空きページは解放できません。
-
プラグインインデクスの使用中空きページは解放できません。
-
(2) 使用中空きページを解放したときの効果
(a) 表の使用中空きページを解放したときの効果
表の使用中空きページを解放したときの効果を次の表に示します。
- (凡例)
-
○:効果があります。
△:条件によって効果の度合いが変わります。
特に,次の表に示す条件をすべて満たす表に対してこの機能を適用すると効果があります。
条件 |
理由 |
---|---|
可変長文字列の更新がない |
分岐行が発生しないため,使用中空きページが解放できる可能性が高くなります。 分岐行は基本行と別のページにあり,そのページには別のデータの基本行が格納されます。このため,分岐していると,ある一定の値(登録期間など)の行を削除してもページに格納されているデータが0件にならない可能性があります。したがって,分岐していなければ,ある期間にINSERTしたデータを削除すると,連続した領域(ページ)が空くため,使用中空きページを解放できる可能性が高くなります。 |
繰返し列の要素数変更がない |
|
NULL値を実データに,又は実データをNULL値に変更しない |
|
クラスタキーインデクスを定義していない |
クラスタキーインデクスを定義している場合はデータの格納位置がキー値で決定するため,使用中空きページを解放してもそのページを使用しない可能性が高く,効果が余りないと考えられます。 |
LOBデータがない |
LOB用RDエリアの格納データはこの機能を適用できません。 |
同一ページ中のデータを一度に削除する |
使用中空きページができやすいため,使用中空きページを解放できる可能性が高くなります。 |
REUSE表(空き領域の再利用機能を使用した表)である |
REUSE表の場合,空きページ解放ユティリティで解放した空きページを空きページ再利用モード時にすぐに再利用できます。REUSE表でない場合,空きページ解放ユティリティで解放した空きページをRDエリア内に新規セグメントが確保できなくなるまで使用しません。 |
上記の表に示す条件から,クラスタキーインデクスを定義していないFIX属性のREUSE表がこの機能を適用するのに最適な表になります。
(b) インデクスの使用中空きページを解放したときの効果
インデクスの使用中空きページを解放したときの効果を次の表に示します。
効果がある項目 |
説明 |
効果の 度合い |
---|---|---|
インデクス格納RDエリアの容量不足の発生を抑えられる |
空きページ(使用中空きページ)があるのに領域不足になる場合は使用中空きページを解放してください。なお,キー値の更新又は削除が多い場合でもインデクス格納RDエリアの容量不足の発生を抑えられます。 |
◎ |
インデクスを再編成するサイクルを長くできる |
使用中空きページを再利用できるためデータの格納効率が良くなります。このため,インデクスを再編成するサイクルを長くできます。 |
○ |
インデクスを使用した大量データ検索時の性能が向上する |
使用中空きページは使用中ページのため検索処理時のサーチ対象になりますが,未使用ページはサーチ対象になりません(サーチ処理がスキップされます)。その分,検索処理の性能が向上します。特に,大量データを検索するときに効果が出ます。 |
△ |
- (凡例)
-
◎:特に効果があります。
○:効果があります。
△:条件によって効果の度合いが変わります。
特に,削除したキー値を再度登録しない場合にこの機能を適用すると効果があります。同一キー値の追加又は削除を繰り返す場合は使用中空きページを再利用するため,使用中空きページが大量に発生することはありません。しかし,単調増加又は単調減少する列(日付,通番など)にインデクスを定義してデータの増加に伴い過去のデータを順番に削除する場合は,インデクスページの前半部分に再利用されない使用中空きページが大量に発生します。インデクスページに使用中空きページが作成される処理を次の図に示します。
なお,使用中空きページの解放後は解放したページにキー値を格納していくため,データの格納効率が良くなります。
- 参考
-
使用中空きページだけが処理の対象になります。格納効率が低下したページのページコンパクションはありません。格納効率が低下したページ(使用中空きページを除く)が大量にある場合に適用しても効果はありません。
(3) 表又はインデクスの再編成との違い
性能面及びデータの格納効率という点から見ると,使用中空きページの解放より表又はインデクスの再編成の方が優れています。しかし,使用中空きページの解放の場合は,ユティリティの実行中に処理対象表又はインデクスをアクセスできます。再編成の場合は,ユティリティの実行中に処理対象表又はインデクスをアクセスできません。このため,使用中空きページの解放の場合は業務を中断する必要がありません。
再編成をするか,使用中空きページを解放するかはデータベース状態解析ユティリティの実行結果から判断してください。判断基準を次に示します。
-
使用中空きページが大量にある場合は使用中空きページを解放してください。
-
セグメント内の空きページ比率(CREATE TABLEのPCTFREEオペランドの値)と掛け離れたページ使用率の使用中ページが大量にある場合は再編成をしてください。
(4) 運用方法
(a) システムログファイルの容量を見積もる
使用中空きページを解放するときにデータベースの更新ログを取得するため,システムログファイルの容量を見積もり直してください。システムログファイルの容量見積もりについては,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
(b) ページの状態を確認する
データベース状態解析ユティリティ(pddbstコマンド)で,ページの格納効率,使用中空きページ数などを定期的に確認してください。ページの使用率が0%のページが使用中空きページです。ページの使用率及び使用中空きページ数は「RDエリア単位の状態解析(論理的解析)」又は「表又はインデクス単位の状態解析」のUsed Page Ratioに表示されます。
使用中空きページ数が増加してきた場合や,データの格納効率が低下してきた場合に使用中空きページの解放を検討してください。
(c) 空きページ解放ユティリティを実行する
空きページ解放ユティリティで使用中空きページを解放します。
表の使用中空きページを解放する場合は,ページコンパクションを行うかどうかを検討してください。次に示す場合はページコンパクションの効果がないため,ページコンパクションをしないで空きページ解放ユティリティを実行してください。
-
使用中ページの大部分が満杯ページか又は使用中空きページの場合
-
すべてのページが空きページの場合
(d) 結果を確認する
空きページ解放ユティリティの実行結果を参照して,予定どおり使用中空きページが解放されているかを確認してください。また,使用中空きセグメントが多い場合は使用中空きセグメントの解放を検討してください。使用中空きセグメントの解放については,「使用中空きセグメントの再利用」を参照してください。
(e) 空きページ解放ユティリティが異常終了した場合
空きページ解放ユティリティが異常終了した場合,利用できない使用中ページが残るため,すぐに空きページ解放ユティリティを再実行してください。空きページ解放ユティリティを再実行すると,利用できない使用中ページが解放されます。
(5) 注意事項
-
インデクスに対して空きページ解放ユティリティを実行する場合,ユティリティの実行中にUAPが長時間待たされることはありません。ただし,処理対象のインデクスにUAPがアクセスした場合,空きページ解放ユティリティはUAPのトランザクション決着処理を待つことがあります。
-
待ち時間の上限を,空きページ解放ユティリティの-wオプションで指定できます。指定した待ち時間内に待ち状態が解除されないと,KFPH25002-Eメッセージを出力して空きページ解放ユティリティを異常終了します。-wオプションを省略するとUAPのトランザクションが決着するまで待ち続けます。
-
未使用ページが少ない状態で空きページ解放ユティリティを実行中に,ロールバックが発生すると,ロールバック中にページ不足が発生し,RDエリアが障害閉塞します。このため,多くのDELETEやUPDATEを伴う業務の実行中は,空きページ解放ユティリティを実行しないでください。
-
インデクスに対して空きページ解放ユティリティを実行する場合,解放できる使用中空きページを,いったんすべて解放予約状態にします。解放予約状態の使用中空きページは,トランザクションの決着処理待ち後に解放され,未使用ページ化します。このため,空きページ解放ユティリティ実行中は,一時的に利用できるページが少なくなり,ページ不足が発生しやすくなります。
-
RDエリアにインデクスだけを格納している場合,障害閉塞したとき,再初期化後に格納しているすべてのインデクスを再作成して回復してください。RDエリアに表とインデクスの両方を格納している場合は,バックアップから回復してください。
-
インデクスに対して空きページ解放ユティリティを実行中にエラーが発生した場合,解放予約状態の使用中空きページが残ります。早期に空きページ解放ユティリティを再実行してください。
なお,HiRDBが異常終了した場合も,エラーが発生した場合と同様に,解放予約状態の使用中空きページが残ります。HiRDBを再開始した後,空きページ解放ユティリティを再実行してください。