INDEX_VECTOR_MEMORY_ESTIMATE
INDEX_VECTOR_MEMORY_ESTIMATE 过程用于分析已建表 的向量索引内存使用情况。
备注
该过程的计算依赖于统计信息,调用前需要先执行 ANALYZE TABLE 更新统计信息。
语法
FUNCTION index_vector_memory_estimate (
IN table_name VARCHAR(65535),
IN column_name VARCHAR(65535),
IN idx_type VARCHAR(65535),
IN idx_parameters LONGTEXT DEFAULT NULL)
INDEX_VECTOR_MEMORY_ESTIMATE 会根据 table_name 和 column_name 读取向量列的维度和数据类型信息,并根据统计信息获取总的向量数和最大分区向量数。预估内存的计算过程和 INDEX_VECTOR_MEMORY_ADVISOR 一致。
参数说明
| 参数 | 描述 |
|---|---|
| table_name | 表名。可以直接是表名,也可以指定数据库和表名。 |
| column_name | 向量列名。 |
| idx_type | 索引类型。支持 HNSW/HNSW_SQ/HNSW_BQ/IVF_FLAT/IVF_SQ8/IVF_PQ,大小写不敏感。 |
| idx_parameters | 索引参数。即建表时所用的向量索引参数字符串,如 distance=l2, type=hnsw, lib=vsag。 |
返回值为字符串格式的描述内存估算结果的一句话。
备注
在 seekdb 中,创建 HNSW_BQ 索引时,系统会根据内存情况自动选择并行或串行方式为分区表创建索引。INDEX_VECTOR_MEMORY_ESTIMATE 函数返回的建议值是串行创建索引时的最大内存需求值。如果内存仅满足这个值,可能会因为无法并行创建索引而延长索引创建时间。
示例
-
创建表
t1并插入数据CREATE TABLE t1 (id int auto_increment, c1 vector(3));
INSERT INTO t1(c1) SELECT array(1/UNIFORM(1,1000,RANDOM(1)), 1/UNIFORM(1,1000,RANDOM(2)) , 1/UNIFORM(1,1000,RANDOM(3))) FROM table(generator(10000)); -
更新表
t1的统计信息ANALYZE TABLE t1; -
查询表
t1的向量索引的内存估算结果-- 查询 HNSW 索引的内存估算结果
SELECT dbms_vector.index_vector_memory_estimate('t1','c1','HNSW','M=10,TYPE=HNSW');
+-----------------------------------------------------------------------------+
| dbms_vector.index_vector_memory_estimate('t1','c1','HNSW','M=10,TYPE=HNSW') |
+-----------------------------------------------------------------------------+
| Suggested minimum vector memory is 11.5 MB |
+-----------------------------------------------------------------------------+
1 row in set
-- 查询 IVF 索引的内存估算结果
SELECT dbms_vector.index_vector_memory_estimate('t1','c1','IVF_FLAT','SAMPLE_PER_NLIST=100');
+---------------------------------------------------------------------------------------------------------+
| dbms_vector.index_vector_memory_estimate('t1','c1','IVF_FLAT','SAMPLE_PER_NLIST=100') |
+---------------------------------------------------------------------------------------------------------+
| Suggested minimum vector memory is 151.5 KB, memory consumption when providing search service is 1.5 KB |
+---------------------------------------------------------------------------------------------------------+
1 row in set