5.3.4 B-treeインデクスのインデクスページ内の未使用領域の確保(PCTFREE)
CREATE INDEX文のPCTFREEで,B-treeインデクスのインデクスページ内の未使用領域をどれだけ確保するか指定できます。
B-treeインデクスが定義されている表に対して行を追加した場合,または行を更新した場合に,インデクスキーの格納対象となるインデクスページに未使用領域がないと,B-treeインデクスのインデクスページスプリットが発生します。B-treeインデクスのインデクスページスプリットについては,「(2) B-treeインデクスのインデクスページスプリット」を参照してください。
B-treeインデクスのインデクスページスプリットが発生すると,ディスクのI/O回数が増加するため,HADBの性能が低下するおそれがあります。そのため,操作系SQLのINSERT文による行の追加,およびUPDATE文による行の更新を行う表に定義するB-treeインデクスについては,インデクスページ内に未使用領域を確保してください。
(1) B-treeインデクスのインデクスページ内に未使用領域を確保するときの目安
B-treeインデクスのインデクスページ内に未使用領域を確保するときの目安を次に示します。
- 表に対して追加および更新する行数が見積もれる場合
-
表に対して追加および更新する行数分,インデクスキーが増加します。未使用領域には,次に示す計算式で求めた値を指定してください。
計算式(単位:%)
データページ構築時の行数とは,対象の表に初めてadbimportコマンドを実行して格納した表データの行数のことです。
- 表に対して追加および更新する行数が見積もれない場合
-
未使用領域には30%(PCTFREEの省略値)を指定してください。
- 表に対して追加および更新を行わない場合(参照だけを行う場合)
-
未使用領域には0%を指定してください。
次に示すコマンドを実行すると,PCTFREEに指定した未使用領域の比率に従ってデータが格納されます。
-
adbimportコマンド
-
作成モードでデータインポートする場合(-dオプションを指定した場合)
-
バックグラウンドインポート機能を使用する場合(-bオプションを指定した場合)
-
追加モードでデータインポートする場合(-dオプションと-bオプションを指定しない場合)
-
-
adbidxrebuildコマンド
-
adbmergechunkコマンド
-
adbunarchivechunkコマンド
(2) B-treeインデクスのインデクスページスプリット
B-treeインデクスはページごとに管理するキーの範囲を決定しています。キー追加時に,本来そのキーを格納するためのインデクスページに空きがない場合,該当ページが管理しているキー群を2つに分割します。これを,B-treeインデクスのインデクスページスプリットといいます。B-treeインデクスのインデクスページスプリットの例を次の図に示します。