MySQL · 最佳实践 · 一个TPC-C测试工具sqlbench使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: TPC-C是数据库系统经常使用的一个性能测试标准,目前开源社区里有几个可以使用的TPC-C测试工具,如BenchmarkSQL、DBT2、 tpcc-mysql等。今天这里要介绍的是另一个TPC-C测试工具: sqlbench。

TPC-C是数据库系统经常使用的一个性能测试标准,目前开源社区里有几个可以使用的TPC-C测试工具,如BenchmarkSQL、DBT2、 tpcc-mysql等。今天这里要介绍的是另一个TPC-C测试工具: sqlbench

sqlbench 特性

sqlbench fork自DBT2,改写了整个架构,原来的DBT2把整个测试过程分成client和 driver 两个应用程序,每个terminal需要 2个线程。如果测试的warehouse较多需要占用机器大量资源。 而sqlbench对这方面做了优化,合并了这两个应用程序,同时优 化了线程的使用,使用1个线程处理多个terminal,大大减少了机器资源的使用。使一台机器可以运行更多的warehouse。另外 DBT2外部依赖较多,如对R环境的依赖,sqlbench去掉了不必要的外部依赖,目前sqlbench只依赖测试数据库的客户端库。下面 是sqlbench的部分特性:

  • 支持多种数据库,目前支持PostgreSQL、MySQL、Kingbase、ODBC
  • 支持多种协议和SQL执行方式,包括普通的SQL语句、PBE(Prepare、Bind、Execute)和存储过程1
  • 支持每种数据库的数据快速加载接口,如:PostgreSQL的 Copy,MySQL的 Load Data Local InFile,同时实现并行加载使数 据加载更快

下面将主要以测试PostgreSQL为例介绍sqlbench的安装和使用,这里我们装载20个warehouse并运行测试120秒。

sqlbench编译安装

sqlbench代码目前托管在github上,可以下载发布的版本,也可以直接使用仓库中的代码,这里以仓库中的代码为例。 下载代码解压后进入sqlbench目录先执行autreconf -if,然后执行configure:

autoreconf -if
./configure --with-postgresql=yes --with-mysql=yes \
   --with-kingbase=<kingbase-installation-path> --with-odbc=yes
AI 代码解读
  • 这里使用 –with-postgresql指定支持postgresql测试,如果–with-postgresql指定yes,configure会在当前PATH下找 pg_config,通过pg_config配置编译的选项
  • –with-postgresql也可以接PostgreSQL的安装路径,它会根据指定的安装配置编译选项
  • –with-mysql与–with-postgresql类似,只是当指定yes时使用的是mysql_config
  • –with-kingbase只支持指定kingbase安装的路径
  • –with-odbc打开ODBC支持只能指定yes

还可以通过给configure加上–prefix选项指定安装路径。configure执行完后执行make && make install安装

创建测试表

使用psql连接到数据库通过执行源代码目录下src/scripts/create-tables.sql文件来创建测试所需的表:

psql tpcc -f src/scripts/create-tables.sql
# 对于MySQL使用:
mysql -D tpcc <src/scripts/create-tables.sql
AI 代码解读

我们先不创建索引,这样装载数据会快一些,当装载完数据再创建索引。

装载数据

src/core/datagen用来装载数据:

src/data/datagen -t postgresql --dbname=tpcc --host=127.0.0.1 -w 20 -j5
# 对于MySQL类似
AI 代码解读

第一个选项使用-t来指定数据库类型(如果指定-t选项,-t必须是第一个选项,这和后面的sqlbench命令是一样的),后面的 长选项是该数据库的连接参数。对于PostgreSQL和MySQL可以指定数据库名、主机名、端口号等,具体可通过datagen –help查 看。这里如果没有指定-t选项,datagen会将数据写到文本文件,然后可通过数据库内置装载命令装载的数据库,默认文件会生 成在当前目录,可以-d改变生成文件的位置。上面还通过-w选项指定了要测试的warehouse数和-j指定了使用多少个并发装载数 据。

创建索引

数据装载完就可以创建索引了,类似于创建表,通过psql或mysql命令来执行src/scripts/create-indexes.sql脚本。创建完索 引后通过analyze命令对数据库进行analyze(MySQL对每个表运行analyze table),使用数据库在运行测试时可以生成正确的 查询计划。

运行测试

执行src/core/sqlbench命令运行测试:

src/core/sqlbench -t postgresql --dbname=tpcc --host=127.0.0.1 -w 20 -l 120 -r 20 -c 5
AI 代码解读

这里:

  • -t 指定PostgreSQL数据库 –dbname和–host为数据库的连接参数,其他没指定的使用默认参数
  • -w 指定测试数据为20个warehouse
  • -l 共运行测试时间为120秒
  • -r 其中ramp up的时间为20秒
  • -c 共使用5个数据库连接

sqlbench其他的常用参数包括:

  • –no-thinktime 默认的TPC-C测试是有keying time和thinking time的,模拟真正的用户场景,可通过指定这个参数将相应 的时间设置成0,来只对CPU加压
  • –sqlapi 选择SQL执行的方式,可选:
    • simple 为普通SQL方式
    • extended 使用prepare/bind/execute方式,该方式先生成查询计划缓存起来,后面直接执行,效率更高
    • storeproc 使用存储过程,这种方式与比extended相比还节省了与数据库服务器通信的开销
  • -s与-e指定开始和结束的warehouse数,在更多warehouse时,可以使用这2个选项分配warehouse,分成多个sqlbench压测同 一个数据库
  • –altered默认情况sqlbench下根据TPC-C标准生成terminal数(每个terminal代表一个user,每个warehouse 10个terminal, 也可以使用–tpw改变),这个参数直接指定了terminal个数,被这些warehouse平均分。
  • –sleep指定每创建一个线程后sleep的时间,默认为1s
  • -o 用来指定output目录,用来存储错误日志及测试结果文件

sqlbench的其他参数是用来定制TPC-C标准的各个部分的,包括keying time、thinking time的时间,各个事务所占比率,各个 表的数据量等,默认值都是遵从TPC-C标准的。

查看测试结果

sqlbench测试过程中会将测试数据写到output目录下的mix.log中,而src/utils/post-process命令是用来处理这个文件查看测 试结果的:

src/utils/post_process -l mix.log
AI 代码解读
                         Response Time (s)
 Transaction      %   Average : 90th %   Total     Rollbacks       %
------------  -----  -----------------  -------  ------------  -----
    Delivery   3.96     0.061 :  0.071       45             0   0.00
   New Order  46.21     0.038 :  0.052      525             5   0.95
Order Status   3.61     0.007 :  0.010       41             0   0.00
     Payment  43.13     0.013 :  0.017      490             0   0.00
 Stock Level   3.08     0.011 :  0.016       35             0   0.00
------------  -----  -----------------  -------  ------------  -----

262.50 new-order transactions per minute (NOTPM)
2.0 minute duration
0 total unknown errors
20 second(s) ramping up
AI 代码解读

以上结果第1列为事务类型,第2列为该事务类型所占的比例,第3列和第4列分别为平均响应时间和90百分位数响应时间(90th percentile),TPC-C要求这2个响应时间必须小于5秒。第5列每种事务总数,第6列和第7列回滚事务数和回滚率,TPC-C要求New Order事务有一定的回滚率。最后的262.50为每分钟New Order事务的个数,这是TPC-C比较重要的一个性能指标。

post_process还可以通过-t选项输出每种事务随时间变化的每分钟执行事务数的统计数据,再配合脚本 src/utils/plot_transaction_rate可以得到对应每分钟事务数的变化曲线2

src/utils/post_process -l mix.log -t transactions-rate.log
src/utils/plot_transaction_rate transaction-rates.log \
  transactions-rate.png
AI 代码解读

下图是上面测试结果的每分钟事务数的变化曲线。 img

写在最后

目前sqlbench工具还不完善,欢迎试用这个工具,如果遇到什么问题可以在Github上提issue,如果感兴趣希望做改进也欢迎提 merge request。

Footnotes

1 目前MySQL、ODBC只支持普通的SQL方式

2 plot_transaction_rate需要系统安装gnuplot

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
db匠
+关注
目录
打赏
0
0
0
0
9495
分享
相关文章
YashanDB TPC-C测试介绍
本文介绍了在YashanDB单机数据库上运行基于BenchmarkSQL的TPC-C测试的操作流程与示例。TPC-C是针对OLTP系统的性能测试标准,模拟大型商品批发商的业务场景,包含5类核心事务:New-Order、Payment、Order-Status、Delivery和Stock-Level。文章详细说明了测试工具下载、环境配置(如修改jTPCC.java等文件)、数据装载及清理步骤,并提供了性能调优建议,包括数据库参数和建库配置优化。最后通过执行`runBenchmark.sh`完成测试,结果中的tpmC值反映系统性能,值越高表明性能越优。
YashanDB TPC-C测试介绍
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
101 1
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
116 6
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
刷新世界纪录!阿里云PolarDB凭借创新的「三层解耦」架构刷新TPC-C基准测试世界纪录
测试脚本编写和维护的最佳实践有哪些?
测试脚本编写和维护的最佳实践有哪些?
166 50
软件测试中的自动化与持续集成:最佳实践与挑战
在快速迭代的软件开发周期中,自动化测试和持续集成(CI)已成为提高软件质量和加速产品上市的关键策略。本文探讨了自动化测试和CI的实施如何帮助开发团队提前发现缺陷、缩短反馈循环,并确保代码质量。我们将深入分析自动化测试的策略选择、工具应用以及面临的挑战,同时提供一些克服这些挑战的最佳实践。
136 15
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
113 4
探索自动化测试在软件开发中的最佳实践
本文旨在深入探讨自动化测试在软件开发过程中的应用,以及如何有效地实施自动化测试以提高软件质量和开发效率。通过分析自动化测试的优势、挑战和最佳实践,本文为软件开发团队提供了一套实用的指导方案。

相关产品

  • 云数据库 RDS MySQL 版
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等