日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

TPC-C測試

本文介紹如何使用TPC-C工具測試PolarDB-X(引擎版本MySQL 5.7和MySQL 8.0)數據庫的聯機交易處理(偏向OLTP能力),您可以按照本文的介紹自行測試進行對比,快速了解數據庫系統的性能。

背景信息

TPC-C是業界常用的一套Benchmark,由TPC委員會制定發布,用于評測數據庫的聯機交易處理(偏向OLTP)能力。主要涉及10張表,包含了NewOrder(新訂單的生成)、Payment(訂單付款)、OrderStatus(最近訂單查詢)、Delivery(配送)和StockLevel(庫存缺貨狀態分析)等五類業務事務模型。TPC-C使用tpmC值(Transactions per Minute)來衡量系統最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction為準,即最終衡量單位為每分鐘處理的新訂單數。

說明

本文中TPC-C的實現基于TPC-C的基準測試,并不能與已發布的TPC-C基準測試結果相比較,本文中的測試并不符合TPC-C基準測試的所有要求。

測試設計

  • 測試數據量

    基于1000 Warehouse,其中主要表的數據量如下:

    • bmsql_order_line表3億行

    • bmsql_stock表1億行

    • bmsql_customer、bmsql_history、bmsql_order各3000萬行

  • 測試所用實例規格

    節點規格

    節點數

    4C32G

    2

    4C32G

    4

    8C64G

    2

    8C64G

    4

  • 測試所用壓力機規格

    ecs.g6.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),詳細操作步驟請參見創建實例

    2. 在實例中創建一個待壓測的數據庫(本測試中數據庫名為tpcc_1000),詳細操作步驟請參見創建數據庫

      CREATE DATABASE tpcc_1000;
    說明

    需保證ECS和PolarDB-X實例在同一個VPC中。

  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. 準備壓測工具

      說明

      BenchmarkSQL默認不支持MySQL協議,需要進行工具改造適配(此處提供了基于開源BenchmarkSQL 5.0改動后的源碼以及編譯后的jar包)。

      下載壓測工具包benchmarksql.tar.gz并上傳至壓力機ECS上,執行以下命令進行解壓:

      tar xzvf benchmarksql.tar.gz
    2. 壓測配置

      在ECS上執行如下命令,修改props.mysql配置文件,并填入對應的PolarDB-X實例連接信息:

      cd benchmarksql/run
      vi props.mysql

      其中, 配置文件以及主要參數解釋如下:

      db=mysql
      driver=com.mysql.jdbc.Driver
      conn=jdbc:mysql://{HOST}:{PORT}/tpcc?readOnlyPropagatesToServer=false&rewriteBatchedStatements=true&failOverReadOnly=false&connectTimeout=3000&socketTimeout=90000&allowMultiQueries=true&clobberStreamingResults=true&characterEncoding=utf8&netTimeoutForStreamingResults=0&autoReconnect=true
      user={USER}
      password={PASSWORD}
      
      warehouses=1000
      loadWorkers=100
      
      terminals=128
      //To run specified transactions per terminal- runMins must equal zero
      runTxnsPerTerminal=0
      //To run for specified minutes- runTxnsPerTerminal must equal zero
      runMins=5
      //Number of total transactions per minute
      limitTxnsPerMin=0
      
      //Set to true to run in 4.x compatible mode. Set to false to use the
      //entire configured database evenly.
      terminalWarehouseFixed=true
      
      //The following five values must add up to 100
      //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
      newOrderWeight=45
      paymentWeight=43
      orderStatusWeight=4
      deliveryWeight=4
      stockLevelWeight=4
      
      // Directory name to create for collecting detailed result data.
      // Comment this out to suppress.
      resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
      
      // osCollectorScript=./misc/os_collector_linux.py
      // osCollectorInterval=1
      // osCollectorSSHAddr=user@dbhost
      // osCollectorDevices=net_eth0 blk_sda
      • conn:連接串配置,需填入主機名{HOST}、端口號{PORT}

      • user:用戶名

      • password:密碼

      • warehouses:倉庫數

      • loadWorkers:導入數據并發數

      • terminals:壓測并發數

      • runMins:壓測時間

    3. 導入壓測數據

      在壓力機ECS中執行如下命令導入壓測數據:

      cd benchmarksql/run/sql.common
      cp tableCreates.sql.auto  tableCreates.sql
      cd ..
      nohup ./runDatabaseBuild.sh props.mysql &
      說明

      默認按照100并發導入,總共5億多條記錄,整體導入時間在小時級別,建議通過nohup推到后臺運行,避免ssh命令行斷開導致導入中斷。

    4. 驗證數據完整性

      通過命令行連接到PolarDB-X實例執行以下SQL,若返回結果集均為空,證明數據完整。

      select a.* from (Select w_id, w_ytd from bmsql_warehouse) a left join (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) b on a.w_id = b.d_w_id and a.w_ytd = b.d_ytd_sum where b.d_w_id is null;
      
      select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select o_w_id, o_d_id, max(o_id) as o_id_max from bmsql_oorder group by  o_w_id, o_d_id) b on a.d_w_id = b.o_w_id and a.d_id = b.o_d_id and a.d_n_o_id = b.o_id_max where b.o_w_id is null;
      
      select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select no_w_id, no_d_id, max(no_o_id) as no_id_max from bmsql_new_order group by no_w_id, no_d_id) b on a.d_w_id = b.no_w_id and a.d_id = b.no_d_id and a.d_n_o_id = b.no_id_max where b.no_id_max is null;
      
      select * from (select (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff from bmsql_new_order group by no_w_id, no_d_id) a where diff != 0;
      
      select a.* from (select o_w_id, o_d_id, sum(o_ol_cnt) as o_ol_cnt_cnt from bmsql_oorder  group by o_w_id, o_d_id) a left join (select ol_w_id, ol_d_id, count(ol_o_id) as ol_o_id_cnt from bmsql_order_line group by ol_w_id, ol_d_id) b on a.o_w_id = b.ol_w_id and a.o_d_id = b.ol_d_id and a.o_ol_cnt_cnt = b.ol_o_id_cnt where b.ol_w_id is null;
      
      select a.* from (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) a left join (Select w_id, w_ytd from bmsql_warehouse) b on a.d_w_id = b.w_id and a.d_ytd_sum = b.w_ytd where b.w_id is null;
  5. 執行壓測

    執行如下命令運行TPC-C測試:

    cd benchmarksql/run
    ./runBenchmark.sh props.mysql

    運行后可以看到實時的tpmC數值,運行結束后會顯示平均的tpmC數值。

    [2024/07/16 17:00:05.845] Average tpmC: 306979.98 Current tpmC: 308052.00 Memory Usage: 661MB / 3584MB
    [2024/07/16 17:00:10.845] Average tpmC: 307029.91 Current tpmC: 309876.00 Memory Usage: 1024MB / 3584MB
    [2024/07/16 17:00:15.845] Average tpmC: 307111.09 Current tpmC: 311820.00 Memory Usage: 429MB / 3584MB
    [2024/07/16 17:00:20.846] Average tpmC: 307108.95 Current tpmC: 306982.60 Memory Usage: 780MB / 3584MB
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 307058.27
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00, Measured tpmTOTAL = 681928.39
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00, Transaction Count = 3411539
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00,
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00,
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00, Session Start = 2024-07-16 16:55:20
    17:00:21,011 [Thread-508] INFO jTPCC : Term-00, Session End = 2024-07-16 17:00:21

測試結果

引擎版本MySQL 5.7

說明

版本號:polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527,詳情請參見:版本發布說明

image

規格

64并發

128并發

256并發

512并發

1024并發

4C32G*2

91858.36

107268.04

108894.07

106442.37

98404.9

4C32G*4

117329.67

178425.44

206076.83

210437.44

209218.11

8C64G*2

106817.2

145097.95

156306.53

152141.55

138043.88

8C64G*4

117888.5

208051.75

296975.34

316085.12

307058.28

引擎版本MySQL 8.0

說明

版本號:polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523,詳情請參見:版本發布說明

image

規格

64并發

128并發

256并發

512并發

1024并發

4C32G*2

71546.19

88074.26

85959.83

79893.78

67109.97

4C32G*4

88000.71

133363.91

166959.56

166549.16

158594.61

8C64G*2

89677.54

118498.21

117536.04

114574.98

101338.24

8C64G*4

101735.81

171088.45

240313.94

236207.55

203671.55