全部产品
Search
文档中心

云原生数据库 PolarDB:PolarSearch基准性能测试方法

更新时间:Apr 23, 2026

本文介绍如何使用OpenSearch Benchmark工具对PolarSearch进行性能基准测试,您可以按照本文介绍自行测试对比,快速了解各产品在真实负载场景下的搜索与写入性能。

测试工具

OpenSearch Benchmark(简称OSB)是OpenSearch官方开源的搜索引擎基准测试框架,前身为Elasticsearch Rally。它内置标准化的行业测试负载(workload),支持对任意兼容Elasticsearch/OpenSearch REST API的搜索引擎产品进行统一、可重复的基准测试,适合产品间横向性能对比。

测试环境

  • 测试工具:OpenSearch Benchmark 2.1.0

  • 配置环境:测试的ECS实例和PolarSearch集群需在同一地域、同一可用区和同一个VPC网络内。

  • ECS实例

    • 实例规格:ecs.c9i.8xlarge(32核128 GiB)

    • 操作系统:Ubuntu 22.04

    • Python版本:3.10+

  • PolarSearch集群

    • 节点规格:8核 32 GB

    • 节点个数:2个

    • 参数配置:均使用开箱即用配置,不额外调整任何集群参数。

测试功能与版本

功能

PolarSearch版本

实例规格

节点个数

PolarSearch

3.0

8核32 GB

2

PolarSearch

1.0

8核32 GB

2

测试负载

Workload

基本信息

测试项目

HTTP logs

基于1998年世界杯期间真实 Web 服务器访问日志构建,数据集包含约2.47亿条日志记录。

index-append数据写入、term查询、range时间范围查询、aggregation聚合

NYC taxis

基于2015年纽约出租车行程数据构建。

index-append数据写入、term查询、range时间范围查询、geodistance地理位置查询、aggregations聚合

Geonames

基于GeoNames地理信息数据库构建,数据集取自2017年4月的全球地名导出文件(allCountries),包含约1,140万条全球地名兴趣点记录。

term + phrase精确/全文查询、aggregations聚合、decay_geo_gauss_function_score地理能力、painless_static脚本评分、desc_sort_population排序查询

测试场景

写入性能测试(Indexing)

  • 测试将完整数据批量写入集群,评估各功能版本在不同并发写入客户端数(bulk_indexing_clients)下的写入吞吐量。

  • 测试采用append-no-conflicts-index-only test procedure,该procedure仅执行索引创建和数据写入,不包含搜索操作。每轮测试均从空索引开始。

  • 测试的并发写入客户端数依次为:1、2、4、8、16、32。

搜索性能测试(Searching)

  • 在写入完成后,使用 --include-tasks参数指定搜索任务列表,在已有数据上直接执行搜索测试,不重复导入数据。

  • 测试的并发搜索客户端数(search_clients)依次为:1、2、4、8、16、32,target_throughput设置为0(全速压测模式)。

安装 OpenSearch Benchmark

说明

OpenSearch Benchmark要求Python版本需为3.8及以上版本。

  1. 执行以下命令安装 OpenSearch Benchmark。

    pip install opensearch-benchmark
  2. 执行以下命令验证安装是否成功。

    opensearch-benchmark --version

测试方法

准备工作

获取PolarSearch的访问地址、用户名及密码,确认网络连通性:

curl -u <user>:<password> http://<endpoint>/_cluster/health?pretty

返回结果说明如下:

  • "status": "green" :表示集群健康。

  • "status": "yellow":表示所有主分片已分配,但部分副本分片尚未分配(例如节点离线)。此时集群仍可读写,但高可用性有所降低。检查方法:

    # 检查分片分配情况
    curl -u <user>:<password> -XGET "http://<endpoint>/_cat/shards?v"
    # 查看未分配分片详情
    curl -u <user>:<password> -XGET "http://<endpoint>/_allocation/explain"
  • "status": "red":表示存在未分配的主分片,集群部分数据不可用,不建议在此状态下执行压测。

执行性能测试

执行以下命令运行性能测试。

opensearch-benchmark run \
    --workload="<workload>" \
    --client-options="basic_auth_user:<user>,basic_auth_password:<password>,verify_certs:false" \
    --target-hosts="<endpoint>" \
    --pipeline=benchmark-only \
    --results-file="path/to/result_file.md" \
    --kill-running-processes \
    --workload-params="number_of_replicas:<index replica数量>,number_of_shards:<index shard数量>,bulk_indexing_clients:<bulk_indexing_clients>,search_clients:<search_clients>,target_throughput:0"
    
    
# 可选参数
#   --test-procedure="<需要执行的workload流程>"
#   --include-tasks="<workload中需要执行的task>"

通用命令行参数说明如下:

参数

含义

--workload

测试负载名称。例如,http_logsnyc_taxis

--test-procedure

测试流程名称。写入测试可使用append-no-conflicts-index-only(纯写入),搜索测试使用append-no-conflicts(含搜索job的完整流程,配合--include-tasks仅执行搜索部分)。

说明

您可通过opensearch-benchmark info --workload=<workload名称> 查看包含哪些可选测试流程。

--include-tasks

若包含此参数,则仅执行指定的job。例如,可用于跳过索引删除、索引创建和数据写入阶段,直接在已有数据上运行搜索测试。

--client-options

集群访问认证信息。

说明

verify_certs:false代表跳过SSL证书校验。

--target-hosts

被测集群的访问地址。

--pipeline=benchmark-only

告知OpenSearch Benchmark,性能测试使用您提供的PolarSearch集群。

--results-file

测试结果输出路径,结果以Markdown格式保存。

--kill-running-processes

启动前自动清理上一轮残留的OpenSearch Benchmark进程,避免进程冲突。

--workload-params

以逗号分隔的键值对,用于向workload的Jinja2模板注入运行时参数,覆盖workload中定义的默认值。

workload参数说明如下:

参数

含义

number_of_replicas

索引副本数。

number_of_shards

索引主分片数。

bulk_indexing_clients

并发写入客户端数。

search_clients

并发搜索客户端数,在搜索测试中生效。

target_throughput:0

关闭请求速率限制,以全速压测模式运行,测量集群的搜索吞吐量上限。

测试结果

每轮测试完成后,OpenSearch Benchmark会在终端输出结果汇总表,并将详细结果写入--results-file指定的文件。主要指标含义如下:

指标

含义

Mean Throughput

测试期间的平均吞吐量,单位为ops/s(每秒完成的请求数)。

target_throughput=0的全速压测模式下,该值直接反映集群在当前并发下的实际处理能力上限,是衡量搜索引擎性能的核心指标。值越高,表示单位时间内能处理的请求越多,性能越好。

p50 Latency

50%分位响应时间(中位数),即一半请求的响应时间低于此值,反映正常请求的典型延迟

p90 / p99 Latency

90%/99%分位响应时间,反映长尾请求的延迟,是衡量服务稳定性的重要指标。值越低,表示极端情况下的延迟抖动越小。

Service Time

请求从发出到收到响应的实际处理时间(不含排队等待时间),反映集群的纯处理耗时。同样包含p50、p90、p99等分位服务时间指标。

Error Rate

测试期间的请求失败率。正常测试结果应为0%,若出现非零值,说明集群在当前负载下已出现错误(如熔断、超时等),该组数据的参考价值降低。

详细测试结果,请参见PolarSearch 1.0性能测试结果PolarSearch 3.0性能测试结果