PolarDB-X 1.0-性能白皮书-PolarDB-X TPC-C测试说明

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文介绍如何使用TPC-C工具测试PolarDB-X数据库的联机交易处理(偏向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的水平扩展能力,还引入了超大规格实例的TPC-C测试,相比于普通实例扩展了近10倍的资源。在超大规格压测设计上,构建了10000 Warehouse,同时TPC-C施压机需要增加到3台32核的ECS机器,避免压测本身成为了瓶颈点。
  • 测试所用实例规格
  • 企业版测试环境:PolarDB-X计算资源DRDS实例企业版32核128 GB(单节点16核64 GB)、4台RDS MySQL 5.7实例(8核32 GB独享型)。
  • 标准版测试环境:PolarDB-X计算资源DRDS实例标准版16核64 GB(单节点8核32 GB)、4台RDS MySQL 5.7实例(4核32 GB独享型)。
  • 超大规格测试环境:PolarDB-X计算资源DRDS实例企业版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. 创建PolarDB-X实例,详细操作步骤请参见步骤一:购买PolarDB-X 1.0计算层资源创建实例
  2. 在实例中创建一个待压测的数据库(本测试中数据库名为tpcc,详细操作步骤请参见步骤二:在私有定制RDS实例之上构建PolarDB-X 1.0数据库
  • 说明 需保证ECS和PolarDB-X在同一个VPC中。
  • 步骤3:压测数据准备
  1. 准备压测工具说明
  1. 下载改造好的压测包tpcc.tar.gz,并在ECS中执行如下命令将其解压到tpcc目录:
mkdir tpcc 
tar zxvf tpcc.tar.gz -C tpcc
  1. 按如下说明修改压缩包内的对应文件:
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不支持外键)
run/sql.common/indexCreates.sql (注释掉全部主键创建,只留2个索引创建,MySQL默认在建表时直接创建索引)
run/sql.common/indexDrops.sql(注释全部主键删除)
run/sql.common/tableCreates.sql(添加主键和拆分键,PolarDB-X需要指定拆分键)
  1. 准备压测配置在ECS中执行如下命令,在tpcc/run目录下创建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 数量
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
  1. 说明
  • 导入压测数据时,需要关注warehouses(仓库数)和loadWorkers(并发数)。
  • TPC-C压测时,需要关注terminals(并发数)和runMins(运行时间)。
  1. 压测执行
  1. 在ECS中执行如下命令准备压测数据:
cd tpcc/run
nohup ./runDatabaseBuild.sh props.mysql &

  1. 说明 默认按照100并发导入,总共5亿多记录,整体导入时间在小时级别,建议通过nohup推到后台运行,避免ssh命令行断开导致导入中断。
  2. 执行如下命令运行TPC-C测试:
cd tpcc/run
./runBenchmark.sh props.mysql
  1. 运行之后可以看到如下测试结果:
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

  1. 说明tpmC值即为对应压测场景下的结果。更多测试结果详情,请参见测试结果
  2. 执行如下命令清理压测数据:
cd tpcc/run
./runDatabaseDestroy.sh props.mysql

测试结果

并发度 标准版实例tpmC 企业版实例tpmC 超大规格实例tpmC
1个客户端x 1000并发 65,735.14 101,620.8 /
6个客户端x 1000并发 / / 821,547.97

drds-expansion1.png

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
25天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
101 2
|
22天前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
109 60
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
18天前
|
测试技术 PHP 开发工具
php性能监测模块XHProf安装与测试
【10月更文挑战第13天】php性能监测模块XHProf安装与测试
16 0
|
2月前
|
敏捷开发 安全 测试技术
软件测试的艺术:确保质量与性能的平衡之道
【9月更文挑战第24天】在软件开发的海洋中,测试是导航灯塔,指引着项目安全抵达质量的彼岸。本文将深入探讨软件测试的核心原则、方法论以及如何通过精心设计的测试策略来保障产品的可靠性和性能。我们将从测试的基础知识出发,逐步深入到高级测试技巧,最终展示如何通过实际案例来应用这些知识以确保软件的成功交付。
|
2月前
|
测试技术 Python
软件测试的艺术:确保质量与性能
【9月更文挑战第19天】在数字化时代,软件已成为我们生活的一部分。然而,随着软件复杂性的增加,如何确保其质量和性能成为了一个挑战。本文将探讨软件测试的重要性,介绍常见的测试类型和策略,并提供实用的代码示例来帮助读者更好地理解和应用这些测试方法。无论你是开发人员、测试工程师还是项目管理者,这篇文章都将为你提供有价值的见解和技巧。
|
2月前
|
存储 Java 关系型数据库
“代码界的魔法师:揭秘Micronaut框架下如何用测试驱动开发将简单图书管理系统变成性能怪兽!
【9月更文挑战第6天】Micronaut框架凭借其轻量级和高性能特性,在Java应用开发中备受青睐。本文通过一个图书管理系统的案例,介绍了在Micronaut下从单元测试到集成测试的全流程。首先,我们使用`@MicronautTest`注解编写了一个简单的`BookService`单元测试,验证添加图书功能;接着,通过集成测试验证了`BookService`与数据库的交互。整个过程展示了Micronaut强大的依赖注入和测试支持,使测试编写变得更加高效和简单。
71 4
|
3月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
3月前
|
存储 算法 Cloud Native
【PolarDB-X列存魔法】揭秘TPC-H测试背后的性能优化秘籍!
【8月更文挑战第25天】阿里巴巴的云原生数据库PolarDB-X以其出色的性能、可靠性和扩展性闻名,在多种业务场景中广泛应用。尤其在列存储模式下,PolarDB-X针对分析型查询进行了优化,显著提升了数据读取效率。本文通过TPC-H基准测试探讨PolarDB-X列存执行计划的优化策略,包括高效数据扫描、专用查询算法以及动态调整执行计划等功能,以满足复杂查询的需求并提高数据分析性能。
80 1

相关产品

  • 云原生分布式数据库 PolarDB-X