ベクトル・プールのサイズ設定

ベクトル索引の作成を許可するには、SGAに格納されるベクトル・プールと呼ばれる新しいメモリー領域を有効にする必要があります。

ベクトル・プールは、Hierarchical Navigable Small World (HNSW)ベクトル索引および関連するすべてのメタデータを格納するためにSGAに割り当てられるメモリーです。また、IVF索引を使用した実表に対するDML操作に加えて、Inverted File Flat (IVF)索引の作成を高速化するためにも使用されます。

ノート:

IVF重心ベクトルは、ベクトル・プールに収まらない場合、共有プールに格納されます。

次の図にベクトル・プールの有効化を示します。

図6-1 ベクトル・プール



オンプレミス環境でベクトル・プールのサイズを設定するには、VECTOR_MEMORY_SIZE初期化パラメータを使用します。このパラメータは、次のレベルで動的に変更できます。

  • CDBレベルのVECTOR_MEMORY_SIZEでは、ベクトル・プールの現在のサイズを指定します。現在、ベクトルが使用されている場合、このパラメータ値を減らすと障害が発生します。
  • PDBレベルのVECTOR_MEMORY_SIZEでは、PDBで許可される最大ベクトル・プール使用量を指定します。現在のベクトル使用量が新しい割当てを超える場合でも、このパラメータ値を減らすことができます。

パラメータ・ファイルのパラメータ値は、次の方法で変更できます。

  • 初期化パラメータ・ファイルを編集する。ほとんどの場合は、次にデータベースのインスタンスを起動したとき、新しいパラメータ値が使用されます。
  • ALTER SYSTEM SET ... SCOPE=SPFILE文を発行してサーバー・パラメータ・ファイルを更新する。
  • ALTER SYSTEM RESET文を発行して、初期化パラメータの値をクリアし、デフォルト値に戻す。

SPFILEを使用している場合に、PDBレベルでVECTOR_MEMORY_SIZEの値を変更する方法の例を次に示します。

SQL> show con_name
CON_NAME
------------------------------
MYPDB1

SQL> show user
USER is "SYS"

SQL> show parameter vector_memory_size
NAME               TYPE        VALUE
------------------ ----------- -----
vector_memory_size big integer 500M

SQL> SELECT ISPDB_MODIFIABLE
  2  FROM   V$SYSTEM_PARAMETER
  3* WHERE  NAME='vector_memory_size';

ISPDB_MODIFIABLE
___________________
TRUE

SQL> ALTER SYSTEM SET vector_memory_size=1G SCOPE=BOTH;

System altered.

SQL> show parameter vector_memory_size

NAME                TYPE        VALUE
------------------- ----------- -------
vector_memory_size  big integer 1G
SQL>

初期化パラメータ値の変更の詳細は、サーバー・パラメータ・ファイルを使用した初期化パラメータの管理を参照してください。

VECTOR_MEMORY_SIZEが1に設定されていて、CDBの初期化時にsga_targetが0より大きい場合、新しい索引用の領域が確保されるように、HNSW索引作成によってベクトル・メモリー・プールが自動的に拡大されます。PDBの最大VECTOR_MEMORY_SIZE値は、PDBのsga_targetの70%に制限されます。HNSW索引を削除すると、それに応じてベクトル・メモリー・プールが縮小されます。

ベクトル・メモリー・プールが自動的に拡大されるこの構成では、PDBのVECTOR_MEMORY_SIZE値はデフォルトで0に設定され、ALTER SYSTEMコマンドを使用して変更できません。自動的な拡大の結果としてベクトル・プール・サイズが変更されてもspfileには保持されないため、データベースを再起動すると、ベクトル・プール・サイズがリセットされます。

V$VECTOR_MEMORY_POOLビューを問い合せて、ベクトル・プールを監視できます。

ノート:

HNSW索引の格納に必要なメモリー・サイズを大まかに決定するには、次の式を使用します。1.3 *ベクトル数*ディメンション数*ベクトル・ディメンション・タイプのサイズ(たとえば、FLOAT32BINARY_FLOATと同等で、サイズは4バイトです)。

Autonomous Databaseサーバーレス・サービスでのベクトル・プール・サイズ

Autonomous Databaseサーバーレス・サービス(ADB-S)を使用する場合、SGA関連のメモリー・パラメータを明示的に設定することはできません。これには、ベクトル・プール・サイズの直接変更が含まれます。

ADB-Sでは、ベクトル・プールは動的に拡大および縮小できます。

  • ベクトル・プール・サイズの増加は、HNSW索引の作成およびHNSW索引を含むPDBの再オープンによって自動的にトリガーされます。
  • ベクトル・プール・サイズの縮小は、HNSW索引の削除、PDBのクローズおよびCPUの削減によって自動的にトリガーされます。

ノート:

ベクトル・プール・サイズは、PDB SGAサイズの最大70%に制限されます。SGAサイズは、次の問合せを使用して取得できます。

SELECT value FROM V$PARAMETER WHERE name='sga_target';

ノート:

インスタンス構成を変更すると、ベクトル・プール・メモリーが不足しているため、以前に作成したHNSW索引が削除される可能性があります。たとえば、15 OCPUの1つのインスタンスが2つのインスタンスに分割され、それぞれに8 OCPUがあるとします。

HNSW索引作成後にベクトル・プールに割り当てられるメモリーの量を確認するには、次のようなSELECT文を使用します。

SELECT sum(alloc_bytes) FROM V$VECTOR_MEMORY_POOL;

ノート:

HNSW索引が作成されるまで、V$VECTOR_MEMORY_POOLALLOC_BYTES列に0を表示します。