背景信息
TPC-C是業(yè)界常用的一套Benchmark,由TPC委員會(huì)制定發(fā)布很泊,用于評(píng)測(cè)數(shù)據(jù)庫的聯(lián)機(jī)交易處理(偏向OLTP能力)角虫。主要涉及10張表,包含了NewOrder(新訂單的生成)撑蚌、Payment(訂單付款)上遥、OrderStatus(最近訂單查詢)搏屑、Delivery(配送)和StockLevel(庫存缺貨狀態(tài)分析)等五類業(yè)務(wù)事務(wù)模型争涌。TPC-C使用tpmC值(Transactions per Minute)來衡量系統(tǒng)最大有效吞吐量(MQTh,Max Qualified Throughput)辣恋,其中Transactions以NewOrder Transaction為準(zhǔn)亮垫,即最終衡量單位為每分鐘處理的新訂單數(shù)模软。
說明 本文的TPC-C的實(shí)現(xiàn)基于TPC-C的基準(zhǔn)測(cè)試,并不能與已發(fā)布的TPC-C基準(zhǔn)測(cè)試結(jié)果相比較饮潦,本文中的測(cè)試并不符合TPC-C基準(zhǔn)測(cè)試的所有要求燃异。
測(cè)試設(shè)計(jì)
-
測(cè)試數(shù)據(jù)量
- 針對(duì)普通實(shí)例性能測(cè)試,TPC-C測(cè)試結(jié)果主要基于1000 Warehouse继蜡,其中主要的表數(shù)據(jù)量如下:
- bmsql_order_line 3億行
- bmsql_stock 1億行
- bmsql_customer回俐、bmsql_history、bmsql_oorder各3000萬行
- 為了驗(yàn)證PolarDB-X 1.0的水平擴(kuò)展能力稀并,還引入了超大規(guī)格實(shí)例的TPC-C測(cè)試仅颇,相比于普通實(shí)例擴(kuò)展了近10倍的資源。在超大規(guī)格壓測(cè)設(shè)計(jì)上碘举,構(gòu)建了10000 Warehouse忘瓦,同時(shí)TPC-C施壓機(jī)需要增加到3臺(tái)32核的ECS機(jī)器,避免壓測(cè)本身成為了瓶頸點(diǎn)引颈。
- 針對(duì)普通實(shí)例性能測(cè)試,TPC-C測(cè)試結(jié)果主要基于1000 Warehouse继蜡,其中主要的表數(shù)據(jù)量如下:
-
測(cè)試所用實(shí)例規(guī)格
- 企業(yè)版測(cè)試環(huán)境:PolarDB-X 1.0計(jì)算資源實(shí)例企業(yè)版32核128 GB(單節(jié)點(diǎn)16核64 GB)耕皮、4臺(tái)RDS MySQL 5.7實(shí)例(8核32 GB獨(dú)享型)。
- 標(biāo)準(zhǔn)版測(cè)試環(huán)境:PolarDB-X 1.0計(jì)算資源實(shí)例標(biāo)準(zhǔn)版16核64 GB(單節(jié)點(diǎn)8核32 GB)蝙场、4臺(tái)RDS MySQL 5.7實(shí)例(4核32 GB獨(dú)享型)凌停。
- 超大規(guī)格測(cè)試環(huán)境:PolarDB-X 1.0計(jì)算資源實(shí)例企業(yè)版256核1024 GB(單節(jié)點(diǎn)16核64 GB)、12臺(tái)RDS MySQL 5.7實(shí)例(32核128 GB獨(dú)享型)售滤。
測(cè)試方法
-
步驟1:準(zhǔn)備壓力機(jī)ECS
需準(zhǔn)備一個(gè)ECS苦锨,后續(xù)操作步驟中涉及的數(shù)據(jù)準(zhǔn)備、運(yùn)行壓測(cè)等使用的都是這臺(tái)ECS機(jī)器趴泌。
說明 建議將測(cè)試所用ECS部署在VPC網(wǎng)絡(luò)內(nèi)(如選擇經(jīng)典網(wǎng)絡(luò)可能出現(xiàn)RDS某些規(guī)格沒有庫存的情況)舟舒。請(qǐng)記住該VPC的名稱和ID,后續(xù)的所有實(shí)例都將部署在該VPC內(nèi)嗜憔。
-
步驟2:準(zhǔn)備壓測(cè)所用PolarDB-X 1.0實(shí)例
- 創(chuàng)建PolarDB-X 1.0實(shí)例秃励,詳細(xì)操作步驟請(qǐng)參見步驟一:購買PolarDB-X 1.0計(jì)算層資源創(chuàng)建實(shí)例。
- 在實(shí)例中創(chuàng)建一個(gè)待壓測(cè)的數(shù)據(jù)庫(本測(cè)試中數(shù)據(jù)庫名為
tpcc
吉捶,詳細(xì)操作步驟請(qǐng)參見步驟二:在私有定制RDS實(shí)例之上構(gòu)建PolarDB-X 1.0數(shù)據(jù)庫
說明 需保證ECS和在同一個(gè)VPC中夺鲜。
-
步驟3:壓測(cè)數(shù)據(jù)準(zhǔn)備
-
準(zhǔn)備壓測(cè)工具
說明
- 本文使用開源的BenchmarkSQL 5.0作為TPC-C測(cè)試。
- BenchmarkSQL默認(rèn)不支持MySQL協(xié)議呐舔,需要進(jìn)行工具改造適配币励,具體改動(dòng),請(qǐng)參見BenchmarkSQL 5.0 支持對(duì)MySQL的TPC-C測(cè)試珊拼。
-
下載改造好的壓測(cè)包tpcc.tar.gz食呻,并在ECS中執(zhí)行如下命令將其解壓到tpcc目錄:
mkdir tpcc tar zxvf tpcc.tar.gz -C tpcc
-
按如下說明修改壓縮包內(nèi)的對(duì)應(yīng)文件:
src/client/jTPCC.java(增加一個(gè)MySQL的type) src/client/jTPCCConnection.java(支持MySQL的語法,加一個(gè)別名) src/LoadData/LoadData.java(關(guān)閉loader數(shù)據(jù)時(shí)的大事務(wù)機(jī)制) src/LoadData/LoadDataWorker.java(關(guān)閉loader數(shù)據(jù)時(shí)的大事務(wù)機(jī)制) run/funcs.sh(腳本增加一個(gè)MySQL的type) run/runDatabaseBuild.sh(去掉不必要的階段) run/runBenchmark.sh(調(diào)整默認(rèn)jvm參數(shù)) run/runLoader.sh(調(diào)整默認(rèn)jvm參數(shù)) run/sql.common/foreignKeys.sql (注釋全部外鍵創(chuàng)建,PolarDB-X 1.0不支持外鍵) run/sql.common/indexCreates.sql (注釋掉全部主鍵創(chuàng)建仅胞,只留2個(gè)索引創(chuàng)建每辟,MySQL默認(rèn)在建表時(shí)直接創(chuàng)建索引) run/sql.common/indexDrops.sql(注釋全部主鍵刪除) run/sql.common/tableCreates.sql(添加主鍵和拆分鍵,PolarDB-X 1.0需要指定拆分鍵)
-
準(zhǔn)備壓測(cè)配置
在ECS中執(zhí)行如下命令干旧,在
tpcc/run
目錄下創(chuàng)建props.mysql
文件:// --------- 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 數(shù)量 warehouses=1000 // 導(dǎo)入數(shù)據(jù)的并發(fā)數(shù)渠欺,每100并發(fā)預(yù)計(jì)產(chǎn)生2萬TPS,可以結(jié)合目標(biāo)TPS能力調(diào)整并發(fā) // runLoader.sh的jvm內(nèi)存椎眯,100并發(fā)默認(rèn)為4 GB挠将,500并發(fā)建議設(shè)置為16 GB loadWorkers=100 // TPC-C 壓測(cè)并發(fā)數(shù) terminals=1000 // 壓測(cè)時(shí)間,單位分鐘 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
說明
- 導(dǎo)入壓測(cè)數(shù)據(jù)時(shí)编整,需要關(guān)注
warehouses
(倉庫數(shù))和loadWorkers
(并發(fā)數(shù))捐名。 - TPC-C壓測(cè)時(shí),需要關(guān)注
terminals
(并發(fā)數(shù))和runMins
(運(yùn)行時(shí)間)闹击。
- 導(dǎo)入壓測(cè)數(shù)據(jù)時(shí)编整,需要關(guān)注
-
壓測(cè)執(zhí)行
-
在ECS中執(zhí)行如下命令準(zhǔn)備壓測(cè)數(shù)據(jù):
cd tpcc/run nohup ./runDatabaseBuild.sh props.mysql &
說明 默認(rèn)按照100并發(fā)導(dǎo)入镶蹋,總共5億多記錄,整體導(dǎo)入時(shí)間在小時(shí)級(jí)別赏半,建議通過nohup推到后臺(tái)運(yùn)行贺归,避免ssh命令行斷開導(dǎo)致導(dǎo)入中斷。
-
執(zhí)行如下命令運(yùn)行TPC-C測(cè)試:
cd tpcc/run ./runBenchmark.sh props.mysql
運(yùn)行之后可以看到如下測(cè)試結(jié)果:
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
值即為對(duì)應(yīng)壓測(cè)場(chǎng)景下的結(jié)果断箫。更多測(cè)試結(jié)果詳情拂酣,請(qǐng)參見測(cè)試結(jié)果。 -
執(zhí)行如下命令清理壓測(cè)數(shù)據(jù):
cd tpcc/run ./runDatabaseDestroy.sh props.mysql
-
-
測(cè)試結(jié)果
<caption style="padding: 0px; margin: 0px; box-sizing: border-box; font-style: normal; font-weight: 500; text-align: left;"></caption><colgroup style="padding: 0px; margin: 0px; box-sizing: border-box;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"></colgroup>
并發(fā)度 | 標(biāo)準(zhǔn)版實(shí)例tpmC | 企業(yè)版實(shí)例tpmC | 超大規(guī)格實(shí)例tpmC |
---|---|---|---|
1個(gè)客戶端x 1000并發(fā) | 65,735.14 | 101,620.8 | / |
6個(gè)客戶端x 1000并發(fā) | / | / | 821,547.97 |
[圖片上傳失敗...(image-8ee409-1648452478887)]
</article>
</main>