全部產品
Search
文件中心

PolarDB:Sysbench測試

更新時間:Jul 26, 2024

本文詳細介紹了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記憶體)

測試方法

  1. 準備壓力機ECS

    需準備一個ECS(建議配置為32 vCPU 128 GB記憶體,避免在測試高規格叢集時,壓力機成為瓶頸),後續操作步驟中涉及的資料準備、運行壓測等使用的都是這台ECS機器。

    說明

    請將測試所用ECS部署在VPC網路內。請記住該VPC的名稱和ID,後續的所有執行個體都將部署在該VPC內。

  2. 準備壓測所用PolarDB-X執行個體

    1. 建立PolarDB-X執行個體(按需選擇引擎版本MySQL 5.7或MySQL 8.0),詳細操作步驟請參見建立執行個體

      說明

      需保證PolarDB-X執行個體和壓力機ECS在同一個VPC中。

    2. 在執行個體中建立一個待壓測的資料庫(本測試中資料庫名為sbtest),詳細操作步驟請參見CREATE DATABASE

      CREATE DATABASE sbtest;
  3. 調整執行個體參數

    說明

    為了在壓測情境下達到最佳效能,需要調整部分PolarDB-X計算層執行個體參數。

    1. 修改參數ENABLE_COROUTINE的值為true,XPROTO_MAX_DN_CONCURRENTXPROTO_MAX_DN_WAIT_CONNECTION的值為4000,詳細操作步驟請參見參數設定

    2. 通過命令列串連到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;
  4. 準備壓測資料

    1. 下載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下載連結

    2. 準備壓測配置

      建立設定檔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:隨機數的分布模式。

    3. 匯入壓測資料

      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。

  5. 執行壓測

    以下列舉了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)

image

規格

並發

QPS

4C32G*2

1000

201462.73

4C32G*4

1000

324683.03

8C64G*2

1000

308174.91

8C64G*4

2000

635865.65

唯讀情境結果 (read_only)

image

規格

並發

QPS

4C32G*2

600

62446.59

4C32G*4

1000

94930.57

8C64G*2

1000

88487.24

8C64G*4

2000

162330.95

讀寫情境結果 (read_write)

image

規格

並發

QPS

4C32G*2

600

43098.16

4C32G*4

600

68750.24

8C64G*2

600

57730.62

8C64G*4

600

111261.22

按索引更新情境結果 (update_index)

image

規格

並發

QPS

4C32G*2

600

49530.87

4C32G*4

600

86850.17

8C64G*2

600

65750.01

8C64G*4

1000

137154.16

非索引更新情境結果 (update_non_index)

image

規格

並發

QPS

4C32G*2

400

50627.05

4C32G*4

1000

90555.72

8C64G*2

1000

68838.02

8C64G*4

1000

137071.73

寫入情境結果 (write_only)

image

規格

並發

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)

image

規格

並發

QPS

4C32G*2

1000

166590.48

4C32G*4

1000

288516.53

8C64G*2

1000

350510.72

8C64G*4

2000

637414.68

唯讀情境結果 (read_only)

image

規格

並發

QPS

4C32G*2

600

59770.01

4C32G*4

1000

71259.87

8C64G*2

1000

69829.69

8C64G*4

2000

128366.39

讀寫情境結果 (read_write)

image

規格

並發

QPS

4C32G*2

600

56134.05

4C32G*4

600

55817.45

8C64G*2

600

60482.86

8C64G*4

600

92855.15

按索引更新情境結果 (update_index)

image

規格

並發

QPS

4C32G*2

600

37474.15

4C32G*4

600

57344.42

8C64G*2

600

55856.94

8C64G*4

1000

87618.81

非索引更新情境結果 (update_non_index)

image

規格

並發

QPS

4C32G*2

400

38017.57

4C32G*4

1000

60779.25

8C64G*2

1000

58065.02

8C64G*4

1000

91060.65

寫入情境結果 (write_only)

image

規格

並發

QPS

4C32G*2

400

29476.72

4C32G*4

600

47558.73

8C64G*2

600

41032.61

8C64G*4

600

65794.57