この記事では、OceanBaseデータベースのベクトルインデックスのメモリ使用量を推定し管理する方法について説明します。
ベクトルインデックスのメモリを設定する
OceanBase ベクトル検索では、ob_vector_memory_limit_percentage を設定して、ベクトルインデックスのメモリを設定します。
V4.3.5 BP3 以降のバージョンでは、HNSW/HNSW_SQ/HNSW_BQ ベクトルインデックスを使用する前に、
ob_vector_memory_limit_percentageを手動で設定してベクトル機能を有効にする必要があります。推奨値は30で、これにより検索性能が最適化されます。デフォルト値を維持すると、ベクトルインデックスにメモリが割り当てられず、インデックス作成時にエラーが発生します。IVF/IVF_PQ インデックスはメモリに常駐する必要がないため、このパラメータに特に注意する必要はありません。設定例は以下のとおりです:ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;V4.3.5 BP3 以降のバージョンでは、ベクトル検索機能がデフォルトで有効になっています。デフォルト値
0は適応モードを表し、システムがテナント内のベクトルインデックスデータのメモリ使用率を自動的に調整します。手動で調整する必要はありません:- テナントの実際のメモリが 8GB 以下の場合、この値は
40に適応します。 - テナントの実際のメモリが 8GB を超える場合、この値は
50に適応します。
- テナントの実際のメモリが 8GB 以下の場合、この値は
インデックスメモリの見積もりと実際の使用量のクエリ
DBMS_VECTOR システムパッケージを使用して、インデックスメモリの見積もりをサポートしています。
- テーブルが作成されていない場合は、INDEX_VECTOR_MEMORY_ADVISOR プロシージャを使用してインデックスメモリを見積もります。
- テーブルが作成され、データが挿入されている場合は、INDEX_VECTOR_MEMORY_ESTIMATE プロシージャを使用してインデックスメモリを分析します。
ベクトルインデックスメモリの見積もりでは、2 つの情報が返されます。1 つはベクトルインデックスを作成するために必要な最小メモリ設定、もう 1 つは HNSW_SQ と IVF インデックス作成後の実際のメモリ使用量です。
実際のメモリ使用量の詳細は、ビュー GV$OB_VECTOR_MEMORY または V$OB_VECTOR_MEMORY から取得できます。
メモリインデックスのロード制御
また、load_vector_index_on_follower 構成パラメータを使用して、follower ロールがメモリベクトルインデックスを自動的にロードするかどうかを制御できます。構文と例については、load_vector_index_on_follower を参照してください。弱い整合性読み取りを必要としない場合は、この構成パラメータを無効にすることで、ベクトルインデックスが占用するメモリを削減できます。
インデックス再構築のメモリ最適化
パーティションテーブルのベクトルインデックス再構築操作では、vector_index_memory_saving_mode設定を使用して、インデックス再構築時のメモリ使用量を制御できます。このモードを有効にすると、パーティションテーブルのベクトルインデックス再構築(rebuild)プロセスにおけるメモリ消費量が低下します。通常、ベクトルインデックス再構築には、インデックスの2倍のメモリが必要です。省内存モードを有効にすると、システムはパーティションテーブルの単一パーティションが構築完了した後、そのパーティションのメモリインデックスを一時的に削除してメモリを解放し、再構築操作に必要な総メモリを効果的に削減します。構文と例については、vector_index_memory_saving_modeを参照してください。