DRDS TPC-C 测试说明
TPC-C 说明
TPC-C 是业界常用的的一套 benchmark,由 TPC 委员会制定发布,用于评测数据库的联机交易处理(偏向OLTP能力)。主要涉及10张表,包含五类业务事务模型(NewOrder – 新订单的生成、Payment – 订单付款、OrderStatus – 最近订单查询、Delivery – 配送、StockLevel – 库存缺货状态分析)。
TPC-C 使用 tpmC 值(Transactions per Minute)来衡量系统最大有效吞吐量 (MQTh, Max Qualified Throughput),其中 Transactions 以 NewOrder Transaction 为准,即最终衡量单位为每分钟处理的新订单数。
测试设计
- 普通实例测试结果主要基于1000 warehouse,其中主要的表数据量如下:bmsql_order_line 3亿行,bmsql_stock 1亿行、bmsql_customer / bmsql_history / bmsql_oorder 各自有3000万行。
- 为了验证 DRDS 的水平扩展能力,引入了超大规格实例的 TPC-C 测试,相比于普通实例扩展了近10倍的资源。在超大规格压测设计上,构建了1万 warehouse,同时 TPC-C 施压机需要增加到3台 32 Core 的 ECS 机器,避免压测本身成为了瓶颈点
测试结果
- 企业版测试环境:DRDS 企业版 32 Core 128 GB(单节点 16 Core 64 GB) + 4 台 RDS MySQL 5.7 实例(8 Core 32 GB 独享型)
- 标准版测试环境:DRDS 标准版 16 Core 64 GB(单节点 8 Core 32 GB)+ 4 台 RDS MySQL 5.7 实例(4 Core 32 GB 独享型)
- 超大规格测试环境:DRDS 企业版 256 Core 1024 GB (单节点 16 Core 64 GB) + 12台 RDS MySQL 5.7 实例 (32 Core 128 GB 独享型)
并发度 | 标准版实例 tpmC | 企业版实例 tpmC | 超大规格实例 tpmC |
---|---|---|---|
1个客户端 * 1000并发 | 65,735.14 | 101,620.8 | / |
6个客户端 * 1000并发 | / | / | 821,547.97 |
如何运行 TPC-C 测试?
Step 1. 准备压力机 ECS
首先准备一个 ECS,这是以下所有操作的基础,准备数据、运行压测等都用的是这台机器。
- 建议选择 VPC 网络,经典网络有可能遇到 RDS 某些规格没有库存。记住这个 VPC 的 ID 和名称,之后我们所有的东西都部署在这个 VPC 里面
Step 2. 准备压测用的 DRDS
创建 DRDS 实例以及相应的 RDS 实例,注意要和 ECS 放在同一个 VPC 中,并在DRDS中创建一个待压测的库,比如 tpcc 库
Step3. 压测数据准备
step3.1 准备压测工具
本文使用开源的 BenchmarkSQL 5.0 作为 TPC-C 测试。
PS:benchmarksql默认不支持mysql协议,需要进行工具改造适配一下,具体可以参考:https://www.jianshu.com/p/622545cb1341
可以通过附件下载改造好的压测包【tpcc.tar.gz】,并解压到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 (注释全部外键创建,DRDS不支持外键)
run/sql.common/indexCreates.sql (注释掉全部主键创建,只留2个索引创建,MySQL默认在建表时直接创建索引)
run/sql.common/indexDrops.sql (注释全部主键删除)
run/sql.common/tableCreates.sql (添加主键和拆分键,DRDS需要指定拆分键)
step3.2 准备压测配置
在tpcc/run目录下创建props.mysql文件
// --------- env config --------- //
db=mysql
driver=com.mysql.jdbc.Driver
conn=jdbc:mysql://drdsxxxx:3306/tpcc
user=tpcc
password=tpcc
// warehouse 数量
warehouses=1000
// 导入数据的并发数,每100并发预计产生2万TPS,可以结合目标TPS能力调整并发
// runLoader.sh的jvm内存,100并发默认为4GB,500并发建议设置为16G
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 (运行时间)
step3.3 压测执行
- 准备压测数据 (1000 warehouse)
cd tpcc/run
nohup ./runDatabaseBuild.sh props.mysql &
默认100并发导入,总共5亿多记录,整体导入时间在小时级别,建议通过nohup推到后台运行,避免ssh命令行断开导致导入中断。
- 运行TPC-C测试
cd tpcc/run
./runBenchmark.sh props.mysql
运行之后可以看到测试结果,对应的tpmC就是最终的压测指标
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
- 清理压测数据
cd tpcc/run
./runDatabaseDestroy.sh props.mysql
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论