全部產品
Search
文件中心

PolarDB:PolarSearch基準效能測試方法

更新時間:Apr 24, 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效能測試結果