本文介紹如何使用TPC-C工具測試PolarDB-X 1.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基準測試的所有要求。
測試設計
- 測試資料量
- 針對普通執行個體效能測試,TPC-C測試結果主要基於1000 Warehouse,其中主要的表資料量如下:
- bmsql_order_line 3億行
- bmsql_stock 1億行
- bmsql_customer、bmsql_history、bmsql_oorder各3000萬行
- 為了驗證PolarDB-X 1.0的水平擴充能力,還引入了超大規格執行個體的TPC-C測試,相比於普通執行個體擴充了近10倍的資源。在超大規格壓測設計上,構建了10000 Warehouse,同時TPC-C施壓機需要增加到3台32核的ECS機器,避免壓測本身成為了瓶頸點。
- 針對普通執行個體效能測試,TPC-C測試結果主要基於1000 Warehouse,其中主要的表資料量如下:
- 測試所用執行個體規格
- 企業版測試環境:PolarDB-X 1.0計算資源執行個體企業版32核128 GB(單節點16核64 GB)、4台RDS MySQL 5.7執行個體(8核32 GB獨享型)。
- 標準版測試環境:PolarDB-X 1.0計算資源執行個體標準版16核64 GB(單節點8核32 GB)、4台RDS MySQL 5.7執行個體(4核32 GB獨享型)。
- 超大規格測試環境:PolarDB-X 1.0計算資源執行個體企業版256核1024 GB(單節點16核64 GB)、12台RDS MySQL 5.7執行個體(32核128 GB獨享型)。
測試方法
- 步驟1:準備壓力機ECS需準備一個ECS,後續操作步驟中涉及的資料準備、運行壓測等使用的都是這台ECS機器。說明 建議將測試所用ECS部署在VPC網路內(如選擇傳統網路可能出現RDS某些規格沒有庫存的情況)。請記住該VPC的名稱和ID,後續的所有執行個體都將部署在該VPC內。
- 步驟2:準備壓測所用PolarDB-X 1.0執行個體
- 建立PolarDB-X 1.0執行個體,詳細操作步驟請參見建立PolarDB-X 1.0執行個體。
- 在執行個體中建立一個待壓測的資料庫(本測試中資料庫名為
tpcc,詳細操作步驟請參見建立資料庫)。
說明 需保證ECS和PolarDB-X 1.0在同一個VPC中。 - 步驟3:壓測資料準備
- 準備壓測工具說明
- 本文使用開源的BenchmarkSQL 5.0進行TPC-C測試。
- BenchmarkSQL預設不支援MySQL協議,需要進行工具改造適配。
- 下載改造好的壓測包tpcc.tar.gz,並在ECS中執行如下命令將其解壓到tpcc目錄:
mkdir tpcc tar zxvf tpcc.tar.gz -C tpcc - 按如下說明修改壓縮包內的對應檔案:
src/client/jTPCC.java(增加一個MySQL的type) src/client/jTPCCConnection.java(支援MySQL的文法,加一個別名) src/LoadData/LoadData.java(關閉loader資料時的大事務機制) src/LoadData/LoadDataWorker.java(關閉loader資料時的大事務機制) run/funcs.sh(指令碼增加一個MySQL的type) run/runDatabaseBuild.sh(去掉不必要的階段) run/runBenchmark.sh(調整預設jvm參數) run/runLoader.sh(調整預設jvm參數) run/sql.common/foreignKeys.sql (注釋全部外鍵建立,PolarDB-X 1.0不支援外鍵) run/sql.common/indexCreates.sql (注釋掉全部主鍵建立,只留2個索引建立,MySQL預設在建表時直接建立索引) run/sql.common/indexDrops.sql(注釋全部主鍵刪除) run/sql.common/tableCreates.sql(添加主鍵和拆分鍵,PolarDB-X 1.0需要指定拆分鍵)設定檔以及主要參數的說明如下:// --------- env config --------- // db=mysql driver=com.mysql.jdbc.Driver conn=jdbc:mysql://drdsxxxx:3306/tpcc? useSSL=false&useServerPrepStmts=false&useConfigs=maxPerformance&rewriteBatchedStatements=true user=tpcc password=tpcc // warehouse 數量 warehouses=1000 // 匯入資料的並發數,每100並發預計產生2萬TPS,可以結合目標TPS能力調整並發 // runLoader.sh的jvm記憶體,100並發預設為4 GB,500並發建議設定為16 GB loadWorkers=100 // TPC-C壓測並發數 terminals=1000 // 壓測時間,單位分鐘 runMins=10 // ---------- default config ------- // //To run specified transactions per terminal- runMins must equal zero runTxnsPerTerminal=0 //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說明- 匯入壓測資料時,需要關注
warehouses(倉庫數)和loadWorkers(並發數)。 - TPC-C壓測時,需要關注
terminals(並發數)和runMins(已耗用時間)。
- 匯入壓測資料時,需要關注
- 壓測執行
- 在ECS中執行如下命令準備壓測資料:
cd tpcc/run nohup ./runDatabaseBuild.sh props.mysql &說明 預設按照100並發匯入,總共5億多記錄,整體匯入時間在小時層級,建議通過nohup推到後台運行,避免ssh命令列斷開導致匯入中斷。 - 執行如下命令運行TPC-C測試:
cd tpcc/run ./runBenchmark.sh props.mysql運行之後可以看到如下測試結果:08:56:16,844 [Thread-883] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 104230.88 08:56:16,844 [Thread-883] INFO jTPCC : Term-00, Measured tpmTOTAL = 231664.49 08:56:16,844 [Thread-883] INFO jTPCC : Term-00, Session Start = 2019-09-19 08:54:16 08:56:16,845 [Thread-883] INFO jTPCC : Term-00, Session End = 2019-09-19 08:56:16 08:56:16,845 [Thread-883] INFO jTPCC : Term-00, Transaction Count = 465440說明tpmC值即為對應壓測情境下的結果。更多測試結果詳情,請參見測試結果。 - 執行如下命令清理壓測資料:
cd tpcc/run ./runDatabaseDestroy.sh props.mysql
- 在ECS中執行如下命令準備壓測資料:
- 準備壓測工具
測試結果
| 並發度 | 標準版執行個體tpmC | 企業版執行個體tpmC | 超大規格執行個體tpmC |
| 1個用戶端x 1000並發 | 65,735.14 | 101,620.8 | / |
| 6個用戶端x 1000並發 | / | / | 821,547.97 |