Vector Pool は OracleDB 23ai で登場した SGAコンポーネントで、Oracle AI Vector Search で利用されます。
具体的には、インメモリ近傍グラフベクトル索引 (HNSW) と 近傍パーティションベクトル索引 (IVF) に関する情報の格納や操作に利用されます。
Vector Pool を有効にする (≒ベクトル索引を利用する) には、初期化パラメータvector_memory_sizeにゼロ以外の値を設定します。
ADB-S でvector_memory_sizeを確認するとゼロとなっており、変更不可でした。(ユーザは ADMIN を使用)
SQL> show parameter vector
NAME TYPE VALUE
---------------------------------- ----------- -------
inmemory_deep_vectorization boolean TRUE
spatial_vector_acceleration boolean TRUE
vector_index_neighbor_graph_reload string RESTART
vector_memory_size big integer 0
vector_query_capture string ON
SQL>
SQL>
SQL> ALTER SYSTEM SET vector_memory_size=1G SCOPE=BOTH;
Error starting at line : 1 in command -
ALTER SYSTEM SET vector_memory_size=1G SCOPE=BOTH
Error report -
ORA-01031: insufficient privileges
https://docs.oracle.com/error-help/db/ora-01031/
01031. 00000 - "insufficient privileges"
*Document: YES
*Cause: A database operation was attempted without the required
privilege(s).
*Action: Ask your database administrator or security administrator to grant
you the required privilege(s).
SQL>
改めてマニュアルを確認すると、vector_memory_sizeは ADB-S では明示的に設定することはできず、動的に拡大・縮小するようです。
Autonomous AI Databaseサーバーレス・サービス(ADB-S)を使用する場合、SGA関連のメモリー・パラメータを明示的に設定することはできません。これには、ベクトル・プール・サイズの直接変更が含まれます。
ADB-Sでは、ベクトル・プールは動的に拡大および縮小できます。
ベクトル・プール・サイズの増加は、HNSW索引の作成およびHNSW索引を含むPDBの再オープンによって自動的にトリガーされます。
ベクトル・プール・サイズの縮小は、HNSW索引の削除、PDBのクローズおよびCPUの削減によって自動的にトリガーされます。
HNSW索引の作成が拡大のトリガーとなっているようなので、索引を作成したところ拡大を確認できました。
SQL> show parameter vector_
NAME TYPE VALUE
---------------------------------- ----------- -------
inmemory_deep_vectorization boolean TRUE
spatial_vector_acceleration boolean TRUE
vector_index_neighbor_graph_reload string RESTART
vector_memory_size big integer 0
vector_query_capture string ON
SQL> CREATE TABLE testtab (
2 vec VECTOR(4096, FLOAT32) NOT NULL
3* );
Table TESTTAB created.
SQL> INSERT /*+ APPEND */ INTO testtab (vec)
2 SELECT v.vec
3 FROM (
4 SELECT LEVEL AS rn
5 FROM dual
6 CONNECT BY LEVEL <= 5000
7 ) t
8 CROSS APPLY (
9 SELECT TO_VECTOR(
10 JSON_ARRAYAGG(val ORDER BY dim RETURNING CLOB),
11 4096,
12 FLOAT32
13 ) AS vec
14 FROM (
15 SELECT LEVEL AS dim,
16 ROUND(DBMS_RANDOM.VALUE(0, 1) + 0 * t.rn, 6) AS val
17 FROM dual
18 CONNECT BY LEVEL <= 4096
19 )
20* ) v;
5,000 rows inserted.
SQL> commit;
Commit complete.
SQL> create vector index testtab_vec_idx on testtab(vec)
2* organization inmemory neighbor graph;
Vector INDEX created.
SQL> show parameter vector_
NAME TYPE VALUE
---------------------------------- ----------- ---------
inmemory_deep_vectorization boolean TRUE
spatial_vector_acceleration boolean TRUE
vector_index_neighbor_graph_reload string RESTART
vector_memory_size big integer 187578594 ★拡大
vector_query_capture string ON
SQL>
インメモリ近傍グラフベクトル索引 (HNSW) を使用する場合多くのメモリが必要となるため、Vector Pool のサイジングがポイントとなります。
Vector Pool のサイジングに活用できるのが、INDEX_VECTOR_MEMORY_ADVISORプロシージャです。
INDEX_VECTOR_MEMORY_ADVISORプロシージャを使用して、ベクトル索引に必要なメモリサイズをシミュレーション可能です。
ベクトルデータの次元数・件数等を指定するか、既に存在するベクトルデータを持つ列を指定可能です。
SQL> SET SERVEROUTPUT ON;
DECLARE
response_json CLOB;
BEGIN
DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
INDEX_TYPE=>'HNSW',
NUM_VECTORS=>5000,
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>5000,
7 DIM_COUNT=>4096,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 105 MB
PL/SQL procedure successfully completed.
SQL>
SQL> SET SERVEROUTPUT ON;
DECLARE
response_json CLOB;
BEGIN
DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
'ADMIN',
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 'ADMIN',
6 'TESTTAB',
7 'VEC',
8 'HNSW',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 105 MB
PL/SQL procedure successfully completed.
SQL> info testtab
TABLE: TESTTAB
LAST ANALYZED:2026-04-23 09:27:33.0
ROWS :5000
SAMPLE SIZE :5000
INMEMORY :DISABLED
COMMENTS :
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
VEC VECTOR(4096,FLOAT32,DENSE) No
768次元・FLOAT32 で 10万件から 10万件ずつ件数を増やしていくと、下記のようになりました。
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>100000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 396 MB
PL/SQL procedure successfully completed.
SQL>
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>200000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 789 MB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>300000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 2 GB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>400000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 2 GB
PL/SQL procedure successfully completed.
SQL>
DECLARE
response_json CLOB;
BEGIN
DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
INDEX_TYPE=>'HNSW',
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>500000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 2 GB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>600000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 3 GB
PL/SQL procedure successfully completed.
SQL>
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>700000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 3 GB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>800000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 4 GB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>900000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 4 GB
PL/SQL procedure successfully completed.
SQL> DECLARE
2 response_json CLOB;
3 BEGIN
4 DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR(
5 INDEX_TYPE=>'HNSW',
6 NUM_VECTORS=>1000000,
7 DIM_COUNT=>768,
8 DIM_TYPE=>'FLOAT32',
9 RESPONSE_JSON=>response_json);
10 END;
11* /
Using default accuracy: 90%
Suggested vector memory pool size: 4 GB
PL/SQL procedure successfully completed.
SQL>
机上で試算※すると下記の通りですので、1GB以降は大胆に丸めているようです。
※次元数 × フォーマットサイズ × 件数 × 1.3 (オーバーヘッド)
| 件数 | サイズ (MB) |
|---|---|
| 100,000 | 381 |
| 200,000 | 762 |
| 300,000 | 1143 |
| 400,000 | 1523 |
| 500,000 | 1904 |
| 600,000 | 2285 |
| 700,000 | 2666 |
| 800,000 | 3047 |
| 900,000 | 3428 |
| 1,000,000 | 3809 |