首批通过分布式安全可靠测评,为关键业务系统打造
向量索引内存管理
更新时间:2026-06-28 18:39:36
本文档介绍如何估算和管理 OceanBase 数据库中所有类型向量索引的内存占用。
配置向量索引内存
OceanBase 向量搜索通过设置 ob_vector_memory_limit_percentage 配置向量索引内存:
该参数默认值为 0 ,表示自适应模式,即系统自动调整租户中的向量索引数据的内存占用比例,无需手动调整:
- 租户实际内存为 8GB 及以下时,该值自适应为
40。 - 租户实际内存为 8GB 以上时,该值自适应为
50。
索引内存估算与实际占用查询
支持通过 DBMS_VECTOR 系统包进行索引内存估算:
- 未建表时,通过 INDEX_VECTOR_MEMORY_ADVISOR 过程估算索引内存。
- 已建表且插入数据时,通过 INDEX_VECTOR_MEMORY_ESTIMATE 过程分析索引内存。
向量索引内存估算会返回两项信息:创建向量索引所需的最少内存配置,以及 HNSW_SQ 和 IVF 索引创建完成后的实际内存占用情况。
注意
对于内存稀疏索引
IDX_TYPE参数须指定为SINDI或SINDI_SQ(不区分大小写)。- 稀疏向量的内存估算依赖稀疏向量的平均长度,即每条向量中非零维度数量的平均值。
实际占用内存的详细信息可以通过视图 GV$OB_VECTOR_MEMORY 或 V$OB_VECTOR_MEMORY 获取。
索引重建内存优化
对于分区表的向量索引重建操作,我们还提供了 vector_index_memory_saving_mode 配置项来控制索引重建的内存占用。开启此模式可以降低分区表向量索引重建(rebuild)过程中的内存消耗。通常,向量索引重建需要消耗相当于索引两倍的内存。开启省内存模式后,系统会在分区表单个分区构建完成后,通过暂时删除该分区的内存索引来释放内存,从而有效降低重建操作所需的总内存。语法和示例请参见vector_index_memory_saving_mode。
HNSW 系列索引增量段数据持久化与合并控制
向量索引在分区内按 段(Segment) 组织。根据 向量索引原理,可分为:
- 基线段(Baseline Segment):只读段,每个分区通常只有一个。
- 增量段(Incremental Segment):由 DML 写入产生,类型有活跃增量段(Active Segment)、冻结增量段(Frozen Segment)和已持久化增量段(Persistence Incremental Segment)。
针对单个分区,可通过以下配置项分别控制活跃增量段的冻结落盘时机,以及增量段与基线段的合并时机:
持久化
ob_vector_index_active_segment_max_size 用于控制 HNSW 系列索引单分区内活跃增量段的最大内存占用量。当活跃增量段内存超过该阈值时,系统会触发冻结;冻结完成后,该段变为冻结增量段。冻结增量段完成持久化落盘后,成为已持久化增量段。
注意
冻结增量段落盘为已持久化增量段后并不会立即释放内存,需等后台合并任务将其合并进基线段后,内存才会降低。
语法和示例请参见 ob_vector_index_active_segment_max_size。
合并
ob_vector_index_merge_trigger_percentage 用于控制持久化增量段内存占持久化后的分区索引总内存的比例。当增量段占比超过该值时,系统将自动触发段合并(Segment Merge),将增量段与基线段合并。
两个配置项的区别:
| 配置项 | 控制对象 | 触发操作 |
|---|---|---|
| ob_vector_index_active_segment_max_size | 活跃增量段内存(绝对值) | 冻结并落盘,变为冻结增量段/已持久化增量段 |
| ob_vector_index_merge_trigger_percentage | 持久化增量段占持久化后的分区索引总内存的比例 | 段合并,与基线段合并 |
说明
上述配置分别作用于“增量写入与落盘”以及“增量段与基线段合并”两条链路,二者配合可平衡写入性能、查询性能与内存占用。
语法与示例请参见 ob_vector_index_merge_trigger_percentage。