跳到主要内容

索引监控与维护

本文档介绍了如何监控和维护 seekdb 向量索引。

监控

通过系统视图可以查看向量索引的基本信息和实时状态。

维护

增量数据过多的情况下,搜索性能会下降。为减小增量数据表的数据量,seekdb 数据库引入了 DBMS_VECTOR 对向量索引进行维护。

增量刷新

提示

此功能支持 HNSW 系列索引,语义索引,内存稀疏索引,不支持 IVF 系列索引。

提示

语义索引如果使用的是异步嵌入模式,增量刷新时会额外触发数据的嵌入,以确保增量数据被正确转换为向量并添加到索引中。

如果建立索引后写入数据较多,建议使用 REFRESH_INDEX 过程进行增量刷新。说明和示例请参见 REFRESH_INDEX

增量刷新每 15 分钟会检查一次,如果增量数据超过 1W 条,则自动执行增量刷新。

全量刷新(重建)

手动全表重建

如果建立索引后更新或删除数据较多,建议使用 REBUILD_INDEX 过程进行全量刷新。说明和示例请参见 REBUILD_INDEX

全量刷新每 24 小时会检查一次,如果新增数据超过原有数据的 20%,则自动执行全量刷新。全量刷新会在后台异步执行,首先创建新的索引,然后替换旧索引。在重建过程中,旧索引保持可用状态,但整体过程相对较慢。

我们还提供了 vector_index_memory_saving_mode 配置项来控制索引重建的内存占用。开启此模式可以降低分区表向量索引重建(rebuild)过程中的内存消耗。通常,向量索引重建需要消耗相当于索引两倍的内存。开启省内存模式后,系统会在分区表单个分区构建完成后,通过暂时删除该分区的内存索引来释放内存,从而有效降低重建操作所需的总内存。语法和示例请参见vector_index_memory_saving_mode

注意事项如下:

  • 执行 离线 DDL 操作(例如 ALTER TABLE 修改表结构或主键)时,将导致索引表的重建。由于重建索引无法指定并行度,系统会默认使用单线程,因此在数据量较大时,重建过程会比较缓慢,从而影响整个 离线 DDL 的执行效率。

  • 重建索引时如果需要修改索引参数,必须在参数列表中同时指定 typedistance,且 typedistance 必须和原索引类型一致,例如原来索引类型是 hnsw,距离算法是 l2,则重建时必须同时指定 type=hnswdistance=l2

  • 重建索引时支持:

    • 修改 mef_searchef_construction 值。
    • 在线重建 ef_search 参数。
    • hnswhnsw_sq 索引类型互相转换重建。
    • ivf_flativf_flativf_pqivf_pq 的索引类型互相转换重建。
    • 支持重建时设置并行度。示例见 REBUILD_INDEX
  • 重建索引时不支持:

    • 修改 typedistance 类型。
    • hnswivf 的索引类型互相转换重建。
    • hnswhnsw_bq 的索引类型互相转换重建。
    • ivf_flativf_pq 之间的交叉重建。

自动分区重建(推荐)

提示

此功能支持 HNSW 系列索引,语义索引,内存稀疏索引,不支持 IVF 系列索引。

提示

语义索引在自动分区重建时,会同时处理增量数据与快照任务,确保索引数据的一致性与完整性。

当前版本会触发自动分区重建任务的场景有两种:

  • 执行向量索引搜索语句时。
  • 定时检查,可手动配置执行周期。
  1. 配置执行周期

    oceanbase 数据库下,通过配置项 vector_index_optimize_duty_time 配置执行周期。示例如下:

    ALTER SYSTEM SET vector_index_optimize_duty_time='[23:00:00, 24:00:00]';

    如上配置完成后,分区重建任务只会在 23:00:00~24:00:00 时间段执行,其他时间段里不会发起。详细参数说明参见相应配置项文档。

  2. 查看任务进展/历史任务

    可通过 CDB/DBA_OB_VECTOR_INDEX_TASKSCDB/DBA_OB_VECTOR_INDEX_TASK_HISTORY 视图查看任务进展和历史任务。

    通过 status 字段判断任务当前状态:

    • 0(PREPARE),表示任务等待执行。
    • 1(RUNNING),表示任务正在执行中。
    • 2(PENDING),表示任务暂停执行。
    • 3(FINISHED),表示任务已完成。

    执行结束的任务,即状态 status=FINISHED 的任务,无论是否执行成功都会被转存到历史表。详细使用示例请参见相应视图文档。

  3. 取消任务

    如需取消任务,可通过 DBA_OB_VECTOR_INDEX_TASKSCDB_OB_VECTOR_INDEX_TASKS 视图获取 trace_id 后,执行以下命令:

    ALTER SYSTEM CANCEL TASK <trace_id>;

    示例如下:

    ALTER SYSTEM CANCEL TASK "Y61480BA2D976-00063084E80435E2-0-1";

相关文档