向量索引大小有上限?超过这个上限,会新建一个索引承接数据?index_vector_memory_estimate预估值比实际占用内存大50%有没有更精确的预估方法?

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.4.2
【问题描述】
CREATE TABLE image_search (
id int(11) NOT NULL AUTO_INCREMENT,
product_id int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘业务关联id’,
image_id int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘图片表id:image_info表id’,
original int(11) NOT NULL DEFAULT ‘0’ COMMENT '图片业务来源代码: ',
int_attr1 int(11) DEFAULT ‘0’ COMMENT ‘检索字段 - int类型1’,
int_attr2 int(11) DEFAULT ‘0’ COMMENT ‘检索字段 - int类型2’,
int_attr3 int(11) DEFAULT ‘0’ COMMENT ‘检索字段 - int类型3’,
str_attr1 varchar(20) DEFAULT ‘’ COMMENT ‘检索字段- str类型1’,
str_attr2 varchar(20) DEFAULT ‘’ COMMENT ‘检索字段- str类型2’,
str_attr3 varchar(20) DEFAULT ‘’ COMMENT ‘检索字段- str类型3’,
embedding VECTOR(768) DEFAULT NULL,
create_time timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3),
modify_time timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uniq_product_id_image_id_original (product_id, image_id, original) BLOCK_SIZE 16384 LOCAL,
VECTOR KEY img_embedding_idx (embedding) WITH (DISTANCE=L2, TYPE=HNSW, M=64, EF_CONSTRUCTION=200, EF_SEARCH=64, LIB=VSAG) BLOCK_SIZE 16384,
VECTOR KEY idx_1785055552074495 (embedding) WITH (DISTANCE=L2, TYPE=HNSW, M=64, EF_CONSTRUCTION=200, EF_SEARCH=64, LIB=VSAG) BLOCK_SIZE 16384
) ORGANIZATION INDEX AUTO_INCREMENT = 20248515 AUTO_INCREMENT_MODE = ‘ORDER’ DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLEGROUP = ‘imagesearch’;

如上,是我的向量表。
其中的向量索引idx_1785055552074495。 是莫名其妙多出来的···

而且当使用 create table image_search_new like image_search. 创建新表时,是没有idx_1785055552074495这个索引的。

疑问1:单个向量索引大小有上限?超过这个上限,会新建一个索引承接数据?

select dbms_vector.index_vector_memory_estimate
(
‘image_search’
,‘embedding’
,‘HNSW’
,‘DISTANCE=L2, TYPE=HNSW, M=64, EF_CONSTRUCTION=200, EF_SEARCH=64, LIB=VSAG’
);
执行结果。推荐:Suggested minimum vector memory is 150.5 GB
实际内存占用:98G。 差了一半。
select * from oceanbase.GV$OB_VECTOR_MEMORY

SVR_IP SVR_PORT TENANT_ID VECTOR_MEM_HOLD VECTOR_MEM_USED VECTOR_MEM_LIMIT
192.168.2.10 2882 1006 97936468050 93043893518 201246061350

疑问二:向量索引内存占用预估值比实际占用内存大50%。有没有更精确的预估方法?

1 个赞

1、没有,不会新建第二个业务向量索引来“承接”数据
2、 index_vector_memory_estimate 给的是“建议最低配置”,不是稳态实际占用。偏大是预期行为。
解释:idx_1785055552074495 来自 rebuild 临时名

1 个赞