跳到主要内容

INDEX_VECTOR_MEMORY_ADVISOR

INDEX_VECTOR_MEMORY_ADVISOR 过程用于估算未建表的向量索引内存使用情况。

语法

FUNCTION index_vector_memory_advisor (
IN idx_type VARCHAR(65535),
IN num_vectors BIGINT UNSIGNED,
IN dim_count INT UNSIGNED,
IN dim_type VARCHAR(65535) DEFAULT 'FLOAT32',
IN idx_parameters LONGTEXT DEFAULT NULL,
IN max_tablet_vectors BIGINT UNSIGNED DEFAULT 0)

参数说明

参数描述
idx_type索引类型。支持 HNSW/HNSW_SQ/HNSW_BQ/IVF_FLAT/IVF_SQ8/IVF_PQ,大小写不敏感。
num_vectors向量数据量。
dim_count向量维度。
dim_type向量元素的数据类型。默认且仅支持为 FLOAT32,大小写不敏感。
idx_parameters索引参数。即建表时所用的向量索引参数字符串,如 distance=l2, type=hnsw, lib=vsag
max_tablet_vectors分区表中最大分区的向量数据量。默认为 0,表示最大分区向量数据量等于向量总数据量。使用分区表可以在总数据量相同的情况下降低最低内存需求。

返回值为字符串格式的描述内存估算结果的一句话。

备注

在 seekdb 中,创建 HNSW_BQ 索引时,系统会根据内存情况自动选择并行或串行方式为分区表创建索引。INDEX_VECTOR_MEMORY_ADVISOR 函数返回的建议值是串行创建索引时的最大内存需求值。如果内存仅满足这个值,可能会因为无法并行创建索引而延长索引创建时间。

为确保向量索引重建的成功执行,建议的内存预留值应大于索引构建完成后向量索引实际占用的内存值。建议的内存值与最大分区向量数量存在关联:

  • 对于 HNSW 和 HNSW_SQ 索引,返回建议的内存值。
  • 对于 HNSW_BQ 索引,返回建议的内存值和索引创建完成后的实际内存占用值。
  • 对于 IVF_FLAT, IVF_SQ8, IVF_PQ 索引,返回建议的内存值和索引创建完成后的实际内存占用值。

示例

查询 HNSW 索引的建议内存值:

SELECT dbms_vector.index_vector_memory_advisor('HNSW',1000000,768,'FLOAT32','M=10,DISTANCE=L2');
+------------------------------------------------------------------------------------------+
| dbms_vector.index_vector_memory_advisor('HNSW',1000000,768,'FLOAT32','M=10,DISTANCE=L2') |
+------------------------------------------------------------------------------------------+
| Suggested minimum vector memory is 7.2 GB |
+------------------------------------------------------------------------------------------+
1 row in set

查询 HNSW_BQ 索引的建议内存值和索引创建完成后的实际内存占用值:

SELECT dbms_vector.index_vector_memory_advisor('HNSW_BQ',1000000,768,'FLOAT32','M=10,DISTANCE=L2');
+---------------------------------------------------------------------------------------------------------+
| dbms_vector.index_vector_memory_advisor('HNSW_BQ',1000000,768,'FLOAT32','M=10,DISTANCE=L2') |
+---------------------------------------------------------------------------------------------------------+
| Suggested minimum vector memory is 4.1 GB, memory consumption when providing search service is 347.5 MB |
+---------------------------------------------------------------------------------------------------------+
1 row in set

查询 IVF 索引的建议内存值和索引创建完成后的实际内存占用值:

SELECT dbms_vector.index_vector_memory_advisor('IVF_FLAT',1000000,768,'FLOAT32','SAMPLE_PER_NLIST=1024,DISTANCE=L2');
+---------------------------------------------------------------------------------------------------------------+
| dbms_vector.index_vector_memory_advisor('IVF_FLAT',1000000,768,'FLOAT32','SAMPLE_PER_NLIST=1024,DISTANCE=L2') |
+---------------------------------------------------------------------------------------------------------------+
| Suggested minimum vector memory is 452.7 MB, memory consumption when providing search service is 384.0 KB |
+---------------------------------------------------------------------------------------------------------------+
1 row in set