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为准,即最终衡量单位为每分钟处理的新订单数。 本文使用Benchmark-Boot提供的TPC-C验证PolarDB-X的性能表现。
说明 本文的TPC-C的实现基于TPC-C的基准测试,并不能与已发布的TPC-C基准测试结果相比较,本文中的测试并不符合TPC-C基准测试的所有要求。
Benchmark Boot 是为 PolarDB-X 开发的一站式压测平台,目前支持的基准测试包括 Sysbench、TPC-C、TPC-H,通过图形化的方式提升测试效率。
测试设计
测试数据量
基于1000 Warehouse,其中主要的表数据量如下:
- bmsql_order_line 3亿行
- bmsql_stock 1亿行
- bmsql_customer、bmsql_history、bmsql_oorder各3000万行
主机资源
组件名称 | 机型 | 说明 |
---|---|---|
OPS机器 | ecs.g7.4xlarge | 安装部署 |
计算节点 (CN) | ecs.hfg7.4xlarge * 3 | 16c64g 单价:2324元/月 |
存储节点 (DN) + 元数据节点(GMS) | ecs.i4.4xlarge * 3 | 16c128g + 3.5TB的存储 单价:3776元/月 |
存储节点需要更好的IO,而计算节点需要更强的CPU计算,采用分离部署的方式,可以提升资源利用的性价比
压力机
组件名称 | 机型 | 说明 |
---|---|---|
压力机 | ecs.hfg7.6xlarge | 24c96g |
测试方法
步骤1:准备压力机
部署Benchmark-Boot,参考文档:使用Benchmark Boot进行压测
# 下载镜像
docker pull polardbx/benchmark-boot:latest
# 启动容器
docker run -itd --name 'benchmark-boot' --privileged --net=host \
-v /etc/localtime:/etc/localtime polardbx/benchmark-boot:latest \
/usr/sbin/init
# 验证
curl http://127.0.0.1:4121/
如果采用离线部署方式,可以采用ops机器下载benchmark-boot镜像后上传到私有仓库
步骤2:准备压测所用 PolarDB-X 实例
创建 PolarDB-X 实例,详细操作步骤请参见:通过 PXD 部署
实例创建参数:
version: v1
type: polardbx
cluster:
name: pxc-test
no_logger: false
gms:
image: polardbx/polardbx-engine:v2.4.0_8.4.19
engine: galaxy
engine_version: "8.0"
host_group: [192.168.1.102, 192.168.1.103, 192.168.1.104]
resources:
mem_limit: 16G
cpu_limit: 8
cn:
image: polardbx/polardbx-sql:v2.4.0_5.4.19
replica: 3
nodes:
- host: 192.168.1.102
- host: 192.168.1.103
- host: 192.168.1.104
resources:
mem_limit: 64G
cpu_limit: 16
dn:
image: polardbx/polardbx-engine:v2.4.0_8.4.19
engine: galaxy
engine_version: "8.0"
replica: 3
nodes:
- host_group: [192.168.1.105, 192.168.1.106, 192.168.1.107]
- host_group: [192.168.1.106, 192.168.1.107, 192.168.1.105]
- host_group: [192.168.1.107, 192.168.1.105, 192.168.1.106]
resources:
mem_limit: 50G
cpu_limit: 16
验证实例可连接,打开Benchmark-Boot,选择左侧运行压测->数据库连接,将数据库链接信息填入Benchmark-Boot,点击“提交”
注意:PolarDB-X提供了多个CN节点,生产环境推荐使用负载均衡设备进行访问,POC测试场景可以使用benchmark-boot自带的loadbalance机制。 配置例子: 主机ip填入多个地址,比如:192.168.1.102:3306,192.168.1.103:3306,192.168.1.104:3306,对应的端口填入-1
步骤3:调整实例参数
通过Benchmark-Boot,左侧运行压测->数据库连接,设置调优参数,建议勾选所有的TP模式调优参数
步骤4:压测数据准备
建库
打开Benchmark-Boot, 选择左侧运行压测->TPC-C->切换库,填入库名tpcc_auto,选择AUTO模式,提交
导入数据
建库完成后,下拉页面到底端,导入TPC-C数据,仓数1000,并发可以填写500,等待数据准备完成
步骤5:执行压测
选择左侧运行压测->TPC-C->运行TPC-C,填入压测参数进行压测
测试结果
200并发 | 400并发 | 600并发 | 800并发 | 1000并发 |
---|---|---|---|---|
138091.09 | 157139.66 | 174417.79 | 176137.82 | 176861.03 |
01:42:57,724 [main] INFO jTPCC : Term-00, warehouses=1000
01:42:57,724 [main] INFO jTPCC : Term-00, terminals=1000
01:42:57,725 [main] INFO jTPCC : Term-00, runMins=60
01:42:57,725 [main] INFO jTPCC : Term-00, limitTxnsPerMin=0
01:42:57,725 [main] INFO jTPCC : Term-00, terminalWarehouseFixed=true
01:42:57,725 [main] INFO jTPCC : Term-00,
01:42:57,725 [main] INFO jTPCC : Term-00, newOrderWeight=45
01:42:57,725 [main] INFO jTPCC : Term-00, paymentWeight=43
01:42:57,725 [main] INFO jTPCC : Term-00, orderStatusWeight=4
01:42:57,725 [main] INFO jTPCC : Term-00, deliveryWeight=4
01:42:57,725 [main] INFO jTPCC : Term-00, stockLevelWeight=4
01:42:57,725 [main] INFO jTPCC : Term-00, newOrderRemotePercent=10
01:42:57,725 [main] INFO jTPCC : Term-00, paymentRemotePercent=15
.......
02:43:02,186 [Thread-862] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 176861.03
02:43:02,186 [Thread-862] INFO jTPCC : Term-00, Measured tpmTOTAL = 393104.67
02:43:02,186 [Thread-862] INFO jTPCC : Term-00, Session Start = 2023-03-22 01:43:01
02:43:02,186 [Thread-862] INFO jTPCC : Term-00, Session End = 2023-03-22 02:43:02
02:43:02,186 [Thread-862] INFO jTPCC : Term-00, Transaction Count = 23588042