首批通过分布式安全可靠测评,为关键业务系统打造
向量数据库 VectorDBBench 测试
更新时间:2026-04-07 20:57:20
VectorDBBench 是一款为主流向量数据库和云服务提供基准测试结果的工具,本文档通过 VectorDBBench 测试 OceanBase 向量数据库的性能。VectorDBBench 的设计注重易用性,可以轻松复现结果或测试新系统。
准备工作
部署 V4.3.5 及以上版本 OceanBase 集群。
创建 MySQL 模式租户。请参见创建租户。
安装 Python 3.11 及以上版本。示例使用 Conda 安装。
# 下载安装 Conda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm ~/miniconda3/miniconda.sh # 重新打开终端,初始化 Conda source ~/miniconda3/bin/activate conda init --all # 新建和初始化 VectorDBBench 所需的 Python 环境 conda create -n vdb python=3.11 conda activate vdb连接到业务租户,调优 HNSW 向量索引搜索相关内存和查询参数:
-- ob_vector_memory_limit_percentage 设置为 30%。 ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; -- ob_query_timeout 设置为 24 小时。 SET GLOBAL ob_query_timeout = 86400000000; -- max_allowed_packet 设置为 1GB。 SET GLOBAL max_allowed_packet=1073741824; -- ddl_thread_score 和 parallel_servers_target 设置创建建索引时的并行度 ALTER SYSTEM SET ddl_thread_score = 8; -- DDL 操作的并行度 SET GLOBAL parallel_servers_target = 624; -- 数据库服务器可以同时处理的并行查询数量其中
ob_vector_memory_limit_percentage = 30只是示例值,具体请根据租户内存和业务量调整,计算逻辑请参见 ob_vector_memory_limit_percentage。
推荐配置
推荐配置租户的资源规格为:
| 配置项 | 值 |
|---|---|
| 内存 | 64G |
| CPU | 16C |
测试方法
克隆 VectorDBBench 代码
注意
建议将 VectorDBBench 和 OceanBase 集群部署在不同机器上,以避免 CPU 资源争夺,提高测试结果的可靠性。
克隆测试工具 VectorDBBench 代码到本地。
git clone https://github.com/zilliztech/VectorDBBench.git
安装依赖
进入 VectorDBBench 目录安装依赖。
cd VectorDBBench
pip install .
运行测试
运行 VectorDBBench。这里给出 HNSW 索引和 IVF 索引两个示例。
HNSW 索引示例
# $host,$port,$user 需替换为实际的 OceanBase 数据库连接信息。
vectordbbench oceanbasehnsw --host $host --port $port --user $user --database test --m 16 --ef-construction 200 --ef-search 40 --k 10 --case-type Performance768D1M --index-type HNSW
更多参数信息可以通过以下命令查看:
vectordbbench oceanbasehnsw --help
几个常用选项具体说明如下:
--num-concurrency:用于调整并发度。 VectorDBBench 会按指定的并发去执行向量查询,并选择最大的 QPS(Queries Per Second,每秒查询数)作为最终结果。--skip-drop-old/--skip-load:表示跳过删除旧数据和导数的步骤。在命令行加上这两个选项后,命令仅执行向量查询操作,而不会删除旧数据重新导数。--k:指定向量查询中要返回的前 K 个近邻结果的个数。--ef-search:HNSW 查询参数,表示查询时的候选集大小。--index-type:指定索引类型,目前支持HNSW、HNSW_SQ和HNSW_BQ。
IVF 索引示例
vectordbbench oceanbaseivf --host $host --port $port --user $user --database test --nlist 1000 --sample_per_nlist 256 --ivf_nprobes 100 --case-type Performance768D1M --index-type IVF_FLAT
几个常用选项说明如下:
--sample_per_nlist:每个聚类中心的取样的数据量。默认值256。--ivf_nprobes:用于设置在进行向量索引查询时,本次查询搜索多少个最近的聚类中心。默认值为8,值越大,召回率越高,但同时搜索时间也会增加。--index-type:指定索引类型,目前支持IVF_FLAT。
更多参数信息可以通过以下命令查看:
vectordbbench oceanbaseivf --help
常见问题
第一次执行测试很慢正常吗?
第一次执行测试需要在 AWS S3 存储下载所需数据集,时间可能会相对较久,为正常现象。
可以自定义修改测试代码吗?
可以。如果你自定义修改了测试代码,需要重新执行 pip install . 安装后再运行测试。