---
title: github-fill
description: 索引性能优化 OceanBase 向量搜索为 IVF 索引提供了性能自动优化机制，通过缓存管理和定期维护来提升搜索性能。本文档介绍了如何配置和监控性能优化任务。 注意 目前仅支持 IVF 系列索引。 优化机制 IVF 系列索引性能优化包含两种自动任务： 缓存预热任务：定期检查所有 IVF 系列索引，如果发现索引对应的…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# 索引性能优化

更新时间：2026-04-12 20:48:52

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/640.ob-vector-search/200.ob-vector-index/700.vector-index-performance-tuning.md)  

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

#### 注意

目前仅支持 IVF 系列索引。

## 优化机制

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

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

## 配置优化执行周期

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

在 `oceanbase` 数据库下，通过配置项 [vector_index_optimize_duty_time](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478820) 设置执行周期：

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

```

配置说明如下：

- 时间格式为 `[开始时间, 结束时间]`。
 - 上述配置表示只在 23:00:00~24:00:00 时间段执行优化任务。
 - 其他时间段不会发起优化任务，避免影响正常业务。

## 监控优化任务

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

- 可以通过 [DBA_OB_VECTOR_INDEX_TASKS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004477685) 视图查看正在执行或等待执行的任务。
 - 可以通过 [DBA_OB_VECTOR_INDEX_TASK_HISTORY](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478307) 视图查看历史任务记录。

具体使用示例如下：

1. 查看当前任务状态

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

   ```sql
   SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASKS;

   ```

   返回结果示例：

   ```shell
   +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
   | 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` 视图查看历史记录：

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

   ```

   返回结果示例：

   ```shell
   +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
   | 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

   ```

## 取消优化任务

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

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

```

#### 注意

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

示例如下：

```sql
-- 登录系统，获取指定任务的 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`。

```sql
-- 登录用户数据库，查询任务状态
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

```

## 相关文档

- [向量索引监控与维护](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004827716)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
