本文詳細介紹了PolarDB-X(引擎版本MySQL 5.7和MySQL 8.0)資料庫的Sysbench測試設計、測試步驟和測試結果。
背景資訊
Sysbench是一款開源的、模組化的、跨平台的多線程效能測試工具,可以執行資料庫在CPU、記憶體、線程、IO等方面的效能測試。本文將驗證PolarDB-X在Sysbench多種情境中的效能表現。
測試設計
測試資料量
Sysbench資料包含16張表,每張表1千萬的資料量。
測試所用執行個體規格
節點規格
節點數
4C32G
2
4C32G
4
8C64G
2
8C64G
4
測試所用壓力機規格
ecs.g7ne.8xlarge(32 vCPU,128 GB記憶體)
測試方法
準備壓力機ECS
需準備一個ECS(建議配置為32 vCPU 128 GB記憶體,避免在測試高規格叢集時,壓力機成為瓶頸),後續操作步驟中涉及的資料準備、運行壓測等使用的都是這台ECS機器。
說明請將測試所用ECS部署在VPC網路內。請記住該VPC的名稱和ID,後續的所有執行個體都將部署在該VPC內。
準備壓測所用PolarDB-X執行個體
建立PolarDB-X執行個體(按需選擇引擎版本MySQL 5.7或MySQL 8.0),詳細操作步驟請參見建立執行個體。
說明需保證PolarDB-X執行個體和壓力機ECS在同一個VPC中。
在執行個體中建立一個待壓測的資料庫(本測試中資料庫名為sbtest),詳細操作步驟請參見CREATE DATABASE。
CREATE DATABASE sbtest;
調整執行個體參數
說明為了在壓測情境下達到最佳效能,需要調整部分PolarDB-X計算層執行個體參數。
修改參數ENABLE_COROUTINE的值為true,XPROTO_MAX_DN_CONCURRENT和XPROTO_MAX_DN_WAIT_CONNECTION的值為4000,詳細操作步驟請參見參數設定。
通過命令列串連到PolarDB-X執行個體,在同一會話內執行如下SQL語句,關閉日誌記錄與CPU採樣統計:
set global RECORD_SQL=false; set global MPP_METRIC_LEVEL=0; set global ENABLE_CPU_PROFILE=false; set global ENABLE_TRANS_LOG=false;
準備壓測資料
下載Sysbench壓測工具包sysbench.tar.gz,並解壓。
tar xzvf sysbench.tar.gz cd sysbench/
安裝編譯所需依賴庫:
yum -y install make automake libtool pkgconfig libaio-devel mysql-devel ./autogen.sh ./configure make -j make install
執行命令
sysbench --version
,返回sysbench 1.1.0
證明壓測工具包安裝成功。也可以通過GitHub下載開源版本的Sysbench,請參見GitHub下載連結。
準備壓測配置
建立設定檔sysb.conf,將PolarDB-X串連資訊填入設定檔,其中設定檔以及主要參數的解讀如下:
mysql-host='{HOST}' mysql-port='{PORT}' mysql-user='{USER}' mysql-password='{PASSWORD}' mysql-db='sbtest' db-driver='mysql' percentile='95' histogram='on' report-interval='1' time='60' rand-type='uniform'
參數說明:
percentile:回應時間採樣的百分位;
histogram:是否展示回應時間分布長條圖;
report-interval:顯示即時結果的時間間隔,單位為秒;
time:壓測時間長度,單位為秒;
rand-type:隨機數的分布模式。
匯入壓測資料
sysbench --config-file='sysb.conf' --create-table-options='dbpartition by hash(id)' --tables='16' --table-size='10000000' --threads='16' --auto_inc='off' oltp_point_select prepare
參數說明:
config-file:指定通用設定檔;
create-table-options:指定建表模式;
tables:表的數量;
table-size:單張表的資料量;
threads:匯入時的並發數;
auto_inc:是否使用auto_increment。
執行壓測
以下列舉了Sysbench 6種不同情境測試的命令,建議首次壓測增加壓測時間長度。
說明命令涉及的相關參數說明如下:
db-ps-mode:是否開啟prepare模式;
mysql-ignore-errors:忽略如鎖衝突等原因產生的MySQL錯誤碼;
range-size:指定range查詢的範圍大小。
點查:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={並發數} oltp_point_select run
唯讀:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={並發數} oltp_read_only run
讀寫:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={並發數} oltp_read_write run
按索引更新:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={並發數} oltp_update_index run
非索引更新:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={並發數} oltp_update_non_index run
寫入:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={並發數} oltp_write_only run
測試結果
引擎版本MySQL 5.7
版本號碼:polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527,詳情請參見:版本發布說明。
以下結果均以QPS作為衡量效能的標準。
點查情境結果 (point_select)
規格 | 並發 | QPS |
4C32G*2 | 1000 | 201462.73 |
4C32G*4 | 1000 | 324683.03 |
8C64G*2 | 1000 | 308174.91 |
8C64G*4 | 2000 | 635865.65 |
唯讀情境結果 (read_only)
規格 | 並發 | QPS |
4C32G*2 | 600 | 62446.59 |
4C32G*4 | 1000 | 94930.57 |
8C64G*2 | 1000 | 88487.24 |
8C64G*4 | 2000 | 162330.95 |
讀寫情境結果 (read_write)
規格 | 並發 | QPS |
4C32G*2 | 600 | 43098.16 |
4C32G*4 | 600 | 68750.24 |
8C64G*2 | 600 | 57730.62 |
8C64G*4 | 600 | 111261.22 |
按索引更新情境結果 (update_index)
規格 | 並發 | QPS |
4C32G*2 | 600 | 49530.87 |
4C32G*4 | 600 | 86850.17 |
8C64G*2 | 600 | 65750.01 |
8C64G*4 | 1000 | 137154.16 |
非索引更新情境結果 (update_non_index)
規格 | 並發 | QPS |
4C32G*2 | 400 | 50627.05 |
4C32G*4 | 1000 | 90555.72 |
8C64G*2 | 1000 | 68838.02 |
8C64G*4 | 1000 | 137071.73 |
寫入情境結果 (write_only)
規格 | 並發 | QPS |
4C32G*2 | 400 | 38636.02 |
4C32G*4 | 600 | 70974.3 |
8C64G*2 | 600 | 52344.94 |
8C64G*4 | 600 | 101282.38 |
引擎版本MySQL 8.0
版本號碼:polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523,詳情請參見:版本發布說明。
以下結果均以QPS作為衡量效能的標準。
點查情境結果 (point_select)
規格 | 並發 | QPS |
4C32G*2 | 1000 | 166590.48 |
4C32G*4 | 1000 | 288516.53 |
8C64G*2 | 1000 | 350510.72 |
8C64G*4 | 2000 | 637414.68 |
唯讀情境結果 (read_only)
規格 | 並發 | QPS |
4C32G*2 | 600 | 59770.01 |
4C32G*4 | 1000 | 71259.87 |
8C64G*2 | 1000 | 69829.69 |
8C64G*4 | 2000 | 128366.39 |
讀寫情境結果 (read_write)
規格 | 並發 | QPS |
4C32G*2 | 600 | 56134.05 |
4C32G*4 | 600 | 55817.45 |
8C64G*2 | 600 | 60482.86 |
8C64G*4 | 600 | 92855.15 |
按索引更新情境結果 (update_index)
規格 | 並發 | QPS |
4C32G*2 | 600 | 37474.15 |
4C32G*4 | 600 | 57344.42 |
8C64G*2 | 600 | 55856.94 |
8C64G*4 | 1000 | 87618.81 |
非索引更新情境結果 (update_non_index)
規格 | 並發 | QPS |
4C32G*2 | 400 | 38017.57 |
4C32G*4 | 1000 | 60779.25 |
8C64G*2 | 1000 | 58065.02 |
8C64G*4 | 1000 | 91060.65 |
寫入情境結果 (write_only)
規格 | 並發 | QPS |
4C32G*2 | 400 | 29476.72 |
4C32G*4 | 600 | 47558.73 |
8C64G*2 | 600 | 41032.61 |
8C64G*4 | 600 | 65794.57 |