HNSWグラフの保持
トランザクションの一貫性のために主に使用される前に定義した構造に加えて、インスタンスの再起動後にHNSW索引をより高速にリロードするために、ディスク上の完全なチェックポイント構造を維持することもできます(有効な場合)。
HNSWの完全チェックポイント
ノート:
- すべての新しいスナップショットで完全チェックポイントが作成されるわけではありません。かわりに、完全チェックポイントは、特定の数のスナップショットが作成された後にのみ生成されます。
- 頂点に対応するベクトルはチェックポイントに格納されません。領域を主に消費するのはベクトルであるため、ベクトルをチェックポイントに格納しないことで、ストレージが倍増しないようにします。グラフ・エッジおよびその他のメタデータに必要な領域のみが使用されます。
HNSWの完全チェックポイントは、新しいインスタンスがOracle RACクラスタに参加するとき、またはインスタンスが再起動されるときのHNSWグラフの作成時間を短縮するために使用されます。ROWIDとVIDのマッピング表の使用および新しいグラフの作成ではなく、完全チェックポイントを使用する主な利点は、特定のベクトルの近傍がすでに計算され、完全チェックポイントに保持されていることです。
ノート:
HNSWの完全チェックポイントはすべてのDMLで保持されるわけではないため、最新のトランザクションを反映していない可能性がありますが、最終的には最新になります。チェックポイントは、特定の回数のグラフ・リフレッシュの後に作成され、各グラフ・リフレッシュは、定義された数のDMLの後に実行されます。
HNSW索引を作成すると、完全チェックポイントの作成とメンテナンスがデフォルトで有効になります。
ノート:
HNSWの完全チェックポイントは、ユーザーの表領域に十分な領域がある場合にのみメンテナンスされます。DBMS_VECTORパッケージを使用して、完全なHNSWチェックポイントを無効または再度有効にできます:
-
無効は、特定の索引の既存の完全チェックポイントを削除し、新しい完全チェックポイントを作成しないことを意味します:
DBMS_VECTOR.DISABLE_CHECKPOINT(<schema owning indexes> [, <index name>]) -
有効(デフォルト)は、次のHNSWグラフ再移入によって特定のHNSW索引の完全チェックポイントが作成されることを意味します:
DBMS_VECTOR.ENABLE_CHECKPOINT(<schema owning indexes> [, <index name>] [, <tablespace name>])
詳細は、「ベクトル索引のステータス、チェックポイントおよびアドバイザのプロシージャ」のENABLE_CHECKPOINTおよびDISABLE_CHECKPOINTプロシージャを参照してください。
V$VECTOR_GRAPH_INDEX_CHECKPOINTSビューを問い合せて、データベース・レベルで完全チェックポイントに関する情報を追跡できます。詳細は、V$VECTOR_GRAPH_INDEX_CHKPTを参照してください。
完全チェックポイントは、作成SCNが現在のインスタンスのSCNと比較して古すぎない場合に、インスタンスのメモリー内にHNSWグラフをリロードするために使用されます。SCNが古すぎる場合、そのインスタンスは複製メカニズムを使用して索引の完全な再移入を実行します。
索引がSCN 100で作成され、その後DMLの増加により、増分スナップショットがそれぞれSCN 200およびSCN 400で作成されるとします。完全チェックポイントは、その作成にかかるコストを考慮すると、すべてのスナップショットに対して作成されるわけではありません。この場合、SCN 100での索引作成中に完全チェックポイントが作成され、その後SCN 400でのみ作成されるものと仮定します。SCN 500のグラフ・リロードでは、SCN 400の最新の完全チェックポイントからグラフがロードされ、残りのグラフは共有ジャーナル表からデルタ・コンテンツを読み取ることによって再作成されます。
親トピック: インメモリー近傍グラフ・ベクトル索引について