Oracle Textに用意されているBIG_IOオプションを使用すると、IO操作を多用するCONTEXT索引の問合せパフォーマンスを改善できます。問合せパフォーマンスが向上するのは、主として回転ディスク上に格納されているデータの場合であり、SSDに格納されているデータについてはあまり効果がありません。
CONTEXT索引でBIG_IOオプションを有効にすると、一意のトークン・テキストごとに1つのLOB (ラージ・オブジェクト・データ型)を伴うトークン・タイプ・ペアが作成されます。したがって、テキストが同じでトークン・タイプが異なるトークンは、$I表で対応する行が異なります。
BIG_IOオプションを有効にした索引では、トークンLOBをSecureFile LOBとして作成する必要があります。SecureFile LOBでは、データが複数のブロックに連続して格納されます。こうすると、問合せで短い読取りを何度も実行するかわりに、連続した長い読取りを実行できるため、問合せの応答時間が短縮されます。
注意:
SecureFilesを使用するには、COMPATIBLE設定が11.0以上である必要があります。また、LOBは自動セグメント領域管理(ASSM)の表領域に作成する必要があります。既存のテキスト索引からSecureFilesに移行する際には、ASSM表領域を使用します。既存の索引をSecureFiles LOBに移行しやすくするために、ALTER INDEX REBUILDは、再索引付けを実行せずに$I表にのみ影響する記憶域プリファレンスを置換できるように拡張されています。
BIG_IO索引オプションを指定してCONTEXT索引を作成するには、まずBIG_IO記憶域属性の値をYESに設定して基本記憶域プリファレンスを作成し、CONTEXT索引の作成時にこの記憶域プリファレンスを指定します。
次の例は、基本記憶域プリファレンスmystoreを作成し、そのBIG_IO記憶域属性の値をYESに設定します。
exec ctx_ddl.create_preference('mystore', 'BASIC_STORAGE');
exec ctx_ddl.set_attribute('mystore', 'BIG_IO', 'YES');
BIG_IOオプションを無効にするには、BIG_IO記憶域属性の値をNOに設定して既存の記憶域プリファレンス(mystore)を更新してから、索引を再構築します。
exec ctx_ddl.set_attribute('mystore', 'BIG_IO', 'NO');
alter index idx rebuild('replace storage mystore');
索引を再構築せずにパーティション索引でBIG_IOオプションを有効にするには、BIG_IO記憶域属性の値をYESに設定して基本記憶域プリファレンスを変更し、ctx_ddl.replace_index_metadataを使用してグローバル索引メタデータを置き換えてから、パーティション索引表のパーティションごとにREBUILDモードでoptimize_indexをコールします。
次の例は、パーティション索引idxに対してBIG_IOオプションを有効にします。
exec ctx_ddl.set_attribute('mystore', 'BIG_IO', 'YES');
exec ctx_ddl.replace_index_metadata('idx', 'replace storage mystore');
exec ctx_ddl.optimize_index('idx', 'rebuild', part_name=>'part1');