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');