Oracle Textに用意されているSTAGE_ITABオプションを使用すると、ほぼリアルタイムの索引付けにDML操作を多用するCONTEXT索引の問合せパフォーマンスを改善できます。
STAGE_ITAB索引オプションを使用しない場合は、新しいドキュメントがCONTEXT索引に追加されるたびに、ドキュメントを検索可能にするためにSYNC_INDEXがコールされます。こうすると、$I表に新しい行が作成されるため、$I表で断片化が大きくなります。これによって、問合せパフォーマンスの低下につながります。
STAGE_ITAB索引オプションを有効にすると、新しいドキュメントに関する情報は$I表ではなく$Gステージング表に格納されます。これによって$I表は断片化しなくなるため、問合せパフォーマンスが低下しません。
STAGE_ITAB索引オプションを有効にすると、$H Bツリー索引も$G表に作成されます。$G表と$H Bツリー索引は、$I表と$X Bツリー索引と同等です。
$G表に存在する行を最適化して$I表に移動するには、MERGE最適化モードを使用します。
STAGE_ITAB索引オプションを指定してCONTEXT索引を作成するには、まずSTAGE_ITAB
記憶域属性の値をYES
に設定して基本記憶域プリファレンスを作成し、CONTEXT索引の作成時にこの記憶域プリファレンスを指定します。
次の例は、基本記憶域プリファレンスmystore
を作成し、そのSTAGE_ITAB
記憶域属性の値をYES
に設定します。
exec ctx_ddl.create_preference('mystore', 'BASIC_STORAGE'); exec ctx_ddl.set_attribute('mystore', 'STAGE_ITAB', 'YES');
ALTER INDEX文の再構築オプションを使用すれば、パーティション化されていない既存のCONTEXT索引に対してSTAGE_ITAB索引オプションを有効にすることもできます。
alter index IDX rebuild parameters('replace storage mystore');
パーティション化されていないCONTEXT索引に対してSTAGE_ITABオプションを無効にするには、STAGE_ITAB
記憶域属性の値をNO
に設定して既存の記憶域プリファレンス(mystore
)を更新してから、索引を再構築します。
exec ctx_ddl.set_attribute('mystore', 'STAGE_ITAB', 'NO'); alter index idx rebuild('replace storage mystore');
この操作は、MERGE最適化モードを使用して最適化プロセスを実行してから、$G表を削除します。
ALTER INDEX文の再構築オプションを、パーティション化されているCONTEXT索引に使用して、STAGE_ITABオプションの有効化と無効化を行うことはできません。
次の例は、CONTEXTパーティション索引idx
に対してSTAGE_ITABオプションを有効にします。
alter index idx parameters('add stage_itab');
次の例は、CONTEXTパーティション索引idx
に対してSTAGE_ITABオプションを無効にします。
alter index idx parameters('remove stage_itab');