オンラインでの索引の再構築

Inverted File Flat (IVF)索引では、基にある実表で重要なDMLアクティビティ(挿入、更新または削除など)が発生した場合に、再構築が必要になることがあります。大きな変更により、索引構造が最適ではなくなり、検索の効率や精度が低下する可能性があります。最適な精度を確保するには、データの経時的な変化に応じて適切な索引再編成を実行することが重要です。内部テストでは、索引再編成の後に1秒当たりの問合せ数(QPS)が大幅に増えることが実証されています。IVF索引は、手動または自動で再構築できます。

手動でのIVF索引の再構築

手動再編成により、ユーザーは、必要なときに索引再構築を開始するよう制御できます。これは特に、索引のパフォーマンスを維持し、データの進化に合わせてデータの整合性を確保するために役立つ可能性があります。IVF索引の手動再編成では、グローバルとローカルの両方の索引再構築がサポートされています:
  • グローバルIVF索引再編成
    グローバルIVF索引再編成では、索引全体が再構築されます。次の構文を使用して、グローバルIVF索引再構築を開始できます:
    ALTER INDEX <ivf_index_name> REBUILD ONLINE [PARALLEL
          <degree_of_parallelism>];

    Oracle AI Database 26aiリリース更新23.26.1以降では、ユーザーがIVF索引の再構築時にパラメータを指定することもできます。これにより、ユーザーは、索引を削除して再作成する必要なく、最初の索引作成の間に使用したのとは異なる一連のパラメータを選択できます。この柔軟性によって、更新したパラメータ値を指定して索引再構築コマンドを実行するだけで、より簡単に、索引のパフォーマンスを調整でき、新しいデータ・パターン用に最適化できます。パラメータの詳細は、「Inverted File FlatのCREATE INDEX」を参照してください。

    ALTER INDEX <ivf_index_name> REBUILD 
    [WITH TARGET ACCURACY] 
    [PARAMETERS (
          NEIGHBOR PARTITIONS <number of partitions>,
          SAMPLES_PER_PARTITION <number of samples>,
          MIN_VECTORS_PER_PARTITION <minimum number of vectors per partition>
                )
    ]
  • ローカルIVF索引再編成

    ローカルIVF索引付けでは、データと検索索引の両方が、一致するパーティションに編成されます。データ表の各パーティションにはその索引内の対応する1つのパーティションがあり、各パーティション内の関連データはまとめてグループ化されます。この構造により、検索パフォーマンスが向上し、データの成長や変化に伴う管理が簡略化されます。詳細は、「ローカルInverted File Flatベクトル索引の理解」を参照してください。前述の理由から、これを使用すると索引全体ではなく選択したパーティションのみを再構築できるようになり、効率が向上し、メンテナンス・オーバーヘッドが減少します。

    索引の特定のパーティションを再構築するには、次の構文を使用します:
    ALTER INDEX <ivf_index_name> REBUILD PARTITION <partition_name> [PARALLEL
          <degree_of_parallelism>] ONLINE;

自動でのIVF索引の再編成

自動索引最適化により、索引の使用状況と状態を継続的に監視することで、索引のパフォーマンスが向上し、手動によるメンテナンスが最小限になります。これを使用すると、必要に応じて自動的に索引が再構築されて、最適な効率が確保されます。デフォルトでは、この機能はグローバルIVF索引に対して有効になっています。バックグラウンド・プロセスにより、すべてのIVF索引が固定間隔で定期的にスキャンされ、それぞれが、最適化が必要な可能性があるか評価されます。これにより、対応する表に対する挿入、更新または削除などのDMLアクティビティが追跡されます。DML変更数が構成可能しきい値(構成済パラメータ)を超えると、自動的に、影響を受ける索引について再構築がスケジュールされます。この事前対策的な手法により、IVF索引が、ユーザーの介入なしで効率的かつ高性能な状態に保たれます。

自動最適化フレームワークは十分に構成可能であり、その操作をカスタマイズするための複数のパラメータが用意されています。ユーザーがバックグラウンド・プロセスの実行頻度を制御でき、DML変更に対する反応性を設定でき、再構築操作をどのようにスケジュールするかを定義できます。これらの構成可能なオプションにより、ユーザーは、ワークロードの特性とパフォーマンスの要件に合わせて自動化を微調整できます。

表6-2 構成パラメータ

パラメータ 説明

VECTOR_INDEX_OPTIMIZATION_BACKGROUND

グローバルとローカルの両方のIVF索引について、バックグラウンドでベクトル索引を管理し最適化する、ベクトル索引バックグラウンド・コーディネータ・プロセスを有効または無効にします。

有効な値は次のとおりです。:

  • VECTOR_INDEX_OPTIMIZATION_BACKGROUND_DISABLED: ベクトル索引のバックグラウンド・コーディネータ・プロセスを無効にします。
  • VECTOR_INDEX_OPTIMIZATION_BACKGROUND_ENABLED: グローバルとローカルの両方のIVF索引についてベクトル索引バックグラウンド・コーディネータ・プロセスを有効にします。
  • VECTOR_INDEX_OPTIMIZATION_BACKGROUND_ENABLED_GLOBAL: グローバルIVF索引のみについてベクトル索引バックグラウンド・コーディネータ・プロセスを有効にします。

デフォルト値: VECTOR_INDEX_OPTIMIZATION_BACKGROUND_ENABLED_GLOBAL

VECTOR_INDEX_OPTIMIZATION_BACKGROUND_INTERVAL

バックグラウンド・コーディネータ・プロセスで索引が最適化される頻度を、秒単位で指定します。

有効な値: 600から231 - 1

デフォルト値: 1800秒

VECTOR_INDEX_OPTIMIZATION_BACKGROUND_MAXPROCS

バックグラウンド・コーディネータ・プロセスでベクトル索引の最適化をスケジュールされるプロセスの最大数を指定します。

有効な値: 1から231 - 1

デフォルト値: 1

VECTOR_INDEX_OPTIMIZATION_DML_THRESHOLD

索引最適化アクションをトリガーする、実表に対して実行されたDML (挿入、更新または削除)操作の数の割合しきい値を指定します。たとえば、そのしきい値を20%に設定した場合は、DML操作の数が実表の現在の行数の20%と等しくなるたびに索引の最適化が開始されます。これにより、必ず、大幅なデータ変更に対応してタイムリーに最適化されるようになります。

有効な値: 1から231 - 1

デフォルト値: 20

VECTOR_INDEX_OPTIMIZATION_MIN_ROWS

索引最適化アクションが開始されるまでの、実表で満たされている必要がある最小行数のしきい値を指定します。

有効な値: 1から231 - 1

デフォルト値: 100,000

VECTOR_INDEX_OPTIMIZATION_TASK_BACKOFF_MINS 失敗した自動索引最適化アクションの後の観測されるバックオフ時間(分単位)を設定します。このバックオフ期間中は、直近の障害発生以降に指定時間が経過するまで、ベクトル索引最適化バックグラウンド・コーディネータにより、影響を受ける索引に対してさらに最適化タスクがスケジュールされることがなくなります。

有効な値: 0から231 - 1

デフォルト値: 60分

VECTOR_INDEX_OPTIMIZATION_TASK_JOB_CLASS

バックグラウンドで実行するように(PL/SQLプロシージャ・コールおよび自動最適化バックグラウンド・コーディネータ・アクションの一環として)スケジュールされている索引最適化タスクのためのジョブ・クラスをユーザーが指定できるようにします。

有効な値は次のとおりです。:
  • VECTOR_INDEX_OPTIMIZATION_JOB_CLASS_DEFAULT: DBMS_SCHEDULERでスケジュールされたバックグラウンド・ジョブをデフォルトの優先度レベルに割り当てます。これらのジョブは、標準のリソース割当ておよびスケジューリングで管理されます。
  • VECTOR_INDEX_OPTIMIZATION_JOB_CLASS_HIGH: DBMS_SCHEDULERを使用してスケジュールされたバックグラウンド・ジョブを高優先度レベルに割り当てます。これらのジョブは、リソース割当ておよびスケジューリングにおいて優先されます。それにより、重要または時間的制約のあるタスクを低優先度のジョブより先に実行できるようになります。

デフォルト値: VECTOR_INDEX_OPTIMIZATION_JOB_CLASS_DEFAULT

ノート:

前述の構成可能パラメータは、このパッケージ内で定義されているPL/SQL定数であるため、接頭辞としてDBMS_VECTOR_ADMINを付ける必要があります。

DBMS_VECTOR_ADMINパッケージを使用したパラメータの構成

DBMS_VECTOR_ADMINパッケージでは、これらのパラメータ値を構成および取得するプロシージャが提供されます。詳細は、「DBMS_VECTOR_ADMIN」を参照してください。次のプロシージャがあります:

表6-3 DBMS_VECTOR_ADMINパッケージ

サブプログラム 説明
SET_PARAMETER 指定したパラメータに対する値を設定します。
GET_PARAMETER 指定したパラメータに対する現在の値を取得します。