跳到主要内容

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_namecolumn_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 函数返回的建议值是串行创建索引时的最大内存需求值。如果内存仅满足这个值,可能会因为无法并行创建索引而延长索引创建时间。

示例

  1. 创建表 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));
  2. 更新表 t1 的统计信息

    ANALYZE TABLE t1;
  3. 查询表 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