跳到主要内容

索引性能优化

seekdb 向量搜索为 IVF 索引提供了性能自动优化机制,通过缓存管理和定期维护来提升搜索性能。本文档介绍了如何配置和监控性能优化任务。

提示

目前仅支持 IVF 系列索引。

优化机制

IVF 系列索引性能优化包含两种自动任务:

  1. 缓存预热任务:定期检查所有 IVF 系列索引,如果发现索引对应的缓存不存在,则自动触发缓存预热,将索引数据加载到内存中。此外,创建 IVF 系列索引时,会自动预热缓存。
  2. 缓存清理任务:定期检查所有 IVF 系列索引缓存,如果发现缓存对应的索引已被删除,则自动清理失效的缓存,释放内存资源。此外,删除 IVF 系列索引时,会自动清理缓存。

配置优化执行周期

系统支持自定义性能优化任务的执行时间窗口,避免在业务高峰期执行影响性能。

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 时间段执行优化任务。
  • 其他时间段不会发起优化任务,避免影响正常业务。

监控优化任务

seekdb 向量索引提供了监控优化任务的功能:

具体使用示例如下:

  1. 查看当前任务状态

    通过 DBA_OB_VECTOR_INDEX_TASKS 视图查看正在执行或等待执行的任务:

    SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASKS;

    返回结果示例:

    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    | TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    | 500020 | 1152921504606846990 | 2002281 | 1970-08-23 17:10:23.174127 | 1970-08-23 17:10:23.174137 | USER | FINISHED | 2 | 1750671687770026 | 0 | YAFF00B9E4D97-00063839E6BD9BBC-0-1 |
    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    1 row in set

    任务状态说明:

    • STATUS = 0:PREPARE,任务等待执行。
    • STATUS = 1:RUNNING,任务正在执行中。
    • STATUS = 3:FINISHED,任务已完成。

    任务类型说明:

    • TASK_TYPE = 2:IVF 缓存预热任务。
    • TASK_TYPE = 3:IVF 失效缓存清理任务。
  2. 查看历史任务记录

    已完成的任务(STATUS = 3)无论成功与否都会被自动转存到历史表,每 10 秒转存一次。通过 DBA_OB_VECTOR_INDEX_TASKS_HISTORY 视图查看历史记录:

    -- 查询指定任务 ID 的历史记录
    SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASKS_HISTORY WHERE TASK_ID=2002281;

    返回结果示例:

    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    | TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    | 500020 | 1152921504606846990 | 2002281 | 1970-08-23 17:10:23.174127 | 1970-08-23 17:10:23.174137 | AUTO | FINISHED | 2 | 1750671687770026 | 0 | YAFF00B9E4D97-00063839E6BD9BBC-0-1 |
    +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
    1 row in set

取消优化任务

通过以下命令可以取消指定任务。

-- trace_id 从上文 DBA_OB_VECTOR_INDEX_TASKS_HISTORY 视图获取
ALTER SYSTEM CANCEL TASK <trace_id>;
提示

只有在任务的失败重试阶段,且执行 ALTER SYSTEM CANCEL TASK 命令的情况下,才能取消任务。如果后台任务卡在某一次执行阶段,无法通过此命令取消后台任务。

示例如下:

-- 登录系统,获取指定任务的 trace_id
SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASK_HISTORY WHERE TASK_ID=2037736;
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| 500041 | 1152921504606847008 | 2037736 | 1970-08-23 17:10:23.203821 | 1970-08-23 17:10:23.203821 | USER | PREPARED | 2 | 1750682301145225 | -1 | YAFF00B9E4D97-00063839E6BDDEE0-0-1 |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
1 row in set

-- 取消任务
ALTER SYSTEM CANCEL TASK "YAFF00B9E4D97-00063839E6BDDEE0-0-1";

取消任务后,任务状态会变为 CANCELLED

-- 登录用户数据库,查询任务状态
SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASK_HISTORY;
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| 500041 | 1152921504606847008 | 2037736 | 1970-08-23 17:10:23.203821 | 1970-08-23 17:10:23.203821 | USER | FINISHED | 2 | 1750682301145225 | -4072 | YAFF00B9E4D97-00063839E6BDDEE0-0-1 |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
1 row in set

相关文档