このドキュメントでは、OceanBase のベクトルインデックスを監視およびメンテナンスする方法について説明します。
監視
システムビューを使用して、ベクトルインデックスの基本情報とリアルタイム状態を確認できます。
- [G]V$OB_HNSW_INDEX_INFO ビューを使用して、HNSW シリーズインデックスの基本情報とリアルタイム状態を確認できます。
- [G]V$OB_IVF_INDEX_INFO ビューを使用して、IVF シリーズインデックスの基本情報とリアルタイム状態を確認できます。
メンテナンス
増分データが多すぎると、検索パフォーマンスが低下します。増分データテーブルのデータ量を削減するため、OceanBase データベースは DBMS_VECTOR を導入し、ベクトルインデックスのメンテナンスをサポートしています。
フルリフレッシュ(再構築)
手動によるテーブル全体の再構築
インデックス作成後に更新または削除されるデータが多い場合、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パラメータの値をインデックス再構築に必要な時間よりも長く設定することを推奨します。これにより、タイムアウト問題を回避できます。
自動パーティション再構築(推奨)
注意
現在のバージョンでは、自動パーティション再構築タスクがトリガーされるシナリオは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";