スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド(UNIX(R)用)

[目次][索引][前へ][次へ]

14.6 インデクスページスプリットの発生回数を削減する方法(アンバランスインデクススプリット)

実行者 表の所有者
<この節の構成>
(1) インデクスページスプリットとは
(2) アンバランスインデクススプリットとは

(1) インデクスページスプリットとは

HiRDBのインデクスはB-tree構造をしています。このため,インデクスページにキーを追加しようとした場合,追加するインデクスページに空き領域がないとき,インデクスページスプリットが発生します。インデクスページスプリットとは,キーを追加するインデクスページに空き領域がないとき,HiRDBが空き領域を確保するために,このインデクスページのインデクス情報を均等に2分割して,後ろの半分を新しいページに移すことです。通常のインデクスページスプリットの例を次の図に示します。

図14-2 インデクスページスプリットの例

[図データ]

(a) インデクスページスプリットの発生に伴うログ量の増加

表にインデクスがある場合,表に対してデータを追加すると,これに伴ってインデクスページにキーが追加されます。このとき,インデクスページ内の未使用領域の比率が小さいと,インデクスページスプリットが頻繁に発生することがあります。インデクスページスプリットが頻繁に発生すると,インデクスの構造の変更に伴うログ量が増加します。

(b) インデクスページスプリット発生回数の削減方法

インデクスページスプリットの発生回数を削減するには,統計解析ユティリティ(pdsteditコマンド)で取得したインデクスページスプリットの情報を基に,インデクスページ内の未使用領域の比率を変更します。インデクスページ内の未使用領域の比率を変更するには,定義系SQLのCREATE INDEXPCTFREEオペランドの値を変更して,インデクスを再度定義します。

統計解析ユティリティで取得したインデクスページスプリットの情報への対処の仕方については,「22.7 インデクスのチューニング」を参照してください。

(2) アンバランスインデクススプリットとは

通常のインデクスページスプリットでは,連続したキー値を追加すると,インデクスページのデータ格納効率が下がります。このような場合,アンバランスインデスクススプリットを使用します。アンバランスインデクススプリットとは,インデクスページのインデクス情報を均等に2分割しないで,不均等に分割することです。これによって,連続したキー値を追加したときに,データの格納効率を向上できます。

アンバランスインデクススプリットが指定された場合,インデクスページのインデクス情報を分割する比率は,キー値の追加位置で決定します。

追加位置がインデクスページから見て前半部分であれば,以降,前半部分にキーが追加されると予測します。このため,追加するキー値より一つ大きいキー値を分割位置として,前半部分を左側ページに格納します。

追加位置が後半部分であれば,以降,後半部分にキーが追加されると予測します。このため,追加位置を分割位置として,後半部分を右側ページに格納します。インデクスページの後半部分にキーを追加した場合のアンバランスインデクススプリットの例を次の図に示します。

図14-3 アンバランスインデクススプリットの例

[図データ]

(a) アンバランスインデクススプリットの適用範囲

アンバランスインデクススプリットは,最終ページでないリーフページだけに適用します。また,ロールバック時は,アンバランスインデクススプリットを適用しないで,通常のインデクスページスプリットを実施します。この場合,50:50の割合でページ分割します。

また,リーフページの最終ページは,定義系SQLのCREATE INDEXPCTFREEオペランドで指定した値に従ってデータを分割します。これは,データロードなどによるキー値の昇順追加に対応するためです。

(b) アンバランスインデクススプリットの適用基準

次に示す条件を満たすインデクスに,アンバランスインデクススプリットを適用すると効果があります。

(c) 指定方法

アンバランスインデクススプリットを使用する場合,定義系SQLのCREATE INDEX,又はCREATE TABLEのインデクスオプションにUNBALANCED SPLITを指定します。