このドキュメントでは、OceanBaseのベクトルインデックスを監視およびメンテナンスする方法について説明します。
モニタリング
システムビューを使用すると、ベクトルインデックスの基本情報とリアルタイム状態を確認できます。
- [G]V$OB_HNSW_INDEX_INFO ビューを使用して、HNSWシリーズインデックスの基本情報とリアルタイム状態を確認できます。
- [G]V$OB_IVF_INDEX_INFO ビューを使用して、IVFシリーズインデックスの基本情報とリアルタイム状態を確認できます。
メンテナンス
増分データが過剰な場合、検索性能が低下します。増分データテーブルのデータ量を削減するため、OceanBaseデータベースはベクトルインデックスのメンテナンスに DBMS_VECTOR を導入しています。
増分更新
注意
IVF/IVF_PQ インデックスには、増分更新のメカニズムがありません。
インデックス作成後にデータの書き込みが多い場合は、REFRESH_INDEX プロシージャを使用して増分更新を実行することを推奨します。説明と例については、REFRESH_INDEXを参照してください。
増分更新は15分ごとにチェックされ、増分データが1万件を超えた場合に自動的に実行されます。
フル更新(再構築)
手動によるテーブル全体の再構築
インデックス作成後にデータの更新や削除が多い場合は、REBUILD_INDEX プロシージャを使用してフルリフレッシュすることを推奨します。説明と例については、REBUILD_INDEX を参照してください。
フルリフレッシュは24時間ごとにチェックされ、新規データが既存データの20%を超えた場合に自動的に実行されます。フルリフレッシュはバックグラウンドで非同期に実行され、まず新しいインデックスを作成し、その後古いインデックスを置き換えます。再構築中も古いインデックスは利用可能な状態が保たれますが、全体的にプロセスは比較的遅くなります。
また、vector_index_memory_saving_mode 構成パラメータを提供しており、インデックス再構築時のメモリ使用量を制御できます。このモードを有効にすると、パーティションテーブルのベクトルインデックス再構築(rebuild)処理中のメモリ消費を削減できます。通常、ベクトルインデックスの再構築にはインデックスサイズの2倍に相当するメモリが必要です。メモリ節約モードを有効にすると、システムはパーティションテーブルの各パーティションの構築が完了した後、そのパーティションのメモリインデックスを一時的に削除することでメモリを解放し、再構築操作に必要な総メモリを効果的に削減します。構文と例については、vector_index_memory_saving_mode を参照してください。
注意点は以下の通りです:
オフラインDDL 操作(例:
ALTER TABLEによるテーブル構造や主キーの変更)を実行すると、インデックステーブルの再構築が発生します。インデックスの再構築では並列度を指定できないため、システムはデフォルトで単一スレッドを使用します。そのため、データ量が多い場合、再構築処理が遅くなり、結果としてオフラインDDL全体の実行効率に影響します。インデックスの再構築時にパラメータの変更が必要な場合は、パラメータリストに
typeとdistanceの両方を指定する必要があり、かつtypeとdistanceは元のインデックスタイプと一致している必要があります。例えば、元のインデックスタイプがhnsw、距離アルゴリズムがl2の場合、再構築時にはtype=hnswとdistance=l2を同時に指定する必要があります。インデックスの再構築時には以下の操作がサポートされます:
m、ef_search、ef_constructionの値を変更する。- IVF/IVF_PQでは、V4.4.2 BP1バージョンで
nlist、sample_per_nlist、distance、nbits、mの値を変更できます。ここでmとnbitsはIVF_PQインデックス独自のパラメータです。 ef_searchパラメータのオンライン再構築。hnsw<->hnsw_sqインデックスタイプの再構築。ivf_flat<->ivf_flat、ivf_pq<->ivf_pqインデックスタイプの再構築。- 再構築時の並列度設定をサポートします。例については REBUILD_INDEX を参照してください。
インデックスの再構築時には以下の操作はサポートされません:
typeとdistanceタイプの変更。hnsw<->ivfインデックスの再構築。hnsw<->hnsw_bqインデックスの再構築。ivf_flat、ivf_pq間の相互再構築。
IVF/IVF_PQによるインデックス再構築の推奨事項(V4.4.2 BP1バージョンのみ適用):
REBUILD INDEXを実行する前に、ob_trx_timeoutパラメータの値をインデックス再構築(rebuild)に必要な時間より長く設定することを推奨します。これにより、タイムアウト問題を回避できます。
自動パーティション再構築(推奨)
注意
現在のバージョンでは、自動パーティション再構築タスクがトリガーされるシナリオは2つあります:
- ベクトルインデックス検索ステートメントを実行する場合。
- 定時チェック。実行間隔は手動で設定できます。
実行間隔の設定
oceanbaseデータベースで、パラメータvector_index_optimize_duty_timeを使用して実行間隔を設定します。例:ALTER SYSTEM SET vector_index_optimize_duty_time='[23:00:00, 24:00:00]';上記の設定が完了すると、パーティション再構築タスクは23:00:00~24:00:00の時間帯にのみ実行され、他の時間帯では実行されません。詳細なパラメータ説明については、対応するパラメータドキュメントを参照してください。
タスクの進捗状況/履歴タスクの確認
CDB/DBA_OB_VECTOR_INDEX_TASKSまたはCDB/DBA_OB_VECTOR_INDEX_TASK_HISTORYビューを使用して、タスクの進捗状況や履歴タスクを確認できます。
statusフィールドでタスクの現在の状態を判断します:- 0(PREPARE)、タスクが実行待ちの状態です。
- 1(RUNNING)、タスクが実行中です。
- 2(PENDING)、タスクの実行が一時停止されています。
- 3(FINISHED)、タスクが完了しました。
実行終了したタスク、つまり
status=FINISHEDのタスクは、実行成功の有無にかかわらず履歴テーブルに転送されます。詳細な使用例については、対応するビューのドキュメントを参照してください。タスクのキャンセル
タスクをキャンセルする場合は、
DBA_OB_VECTOR_INDEX_TASKSまたはCDB_OB_VECTOR_INDEX_TASKSビューでtrace_idを取得し、以下のコマンドを実行します:ALTER SYSTEM CANCEL TASK <trace_id>;例:
ALTER SYSTEM CANCEL TASK "Y61480BA2D976-00063084E80435E2-0-1";