1 概述
对于应用系统来说,数据库的性能直接影响应用系统的性能。 对数据库进行性能测试可以更准确地分析和识别数据库是否能够有效承受多个用户的并发访问。 因此,数据库性能测试对于应用系统性能具有重要意义。 在应用系统测试工作中,数据库作为独立的一部分进行全面测试,可以更准确地发现数据库相关问题并进行相关优化。 品质增加可靠保证。
1.1. 数据库性能测试
数据库性能测试是在一定环境下根据压力测试要求进行的一种测试。 通过自动化测试工具模拟各种正常、峰值或异常负载情况来测试数据库的各项性能指标。 目的是通过数据库性能测试来测试是否满足负载要求,寻找优化数据库和提高性能的方法,指导数据库的改进和进一步发展。
数据库性能测试需要使用相关工具。 我们调查了以下开源/免费和商业数据库性能测试工具(数据来自开源软件,统计截至2023年2月21日):
在数据库性能测试相关的开源软件中,基金会的开源软件星级排名最高,是数据库事务性能委员会TPC组织的数据库性能测试工具,因此本文选取星级排名前两位, , 和 。 此外,本文还研究了员工开发的数据库基准测试工具和商业软件。
1.2. 测试指标
数据库性能测试结果的分析需要用到以下监控指标:并发度、响应时间、吞吐量。 另外,数据库服务器上的监控指标也可以辅助结果分析:CPU使用率、内存使用率。
2. 工具介绍
2.1.
2.1.1. 介绍
它是基金会提供的一个基于Java的开源压力测试工具,提供以下功能: 1、对不同类型的应用/服务进行性能测试; 2.支持图形界面和命令行模式; 3.提供性能测试结果的图形分析功能; 4、针对负载压力大的场景,支持分布式环境部署。 作为一款开源软件,它具有很强的可扩展性,有开源社区的大力支持,社区中的开发者活跃度很高。
涉及的主要组件如下:测试计划、采样器、预处理器、配置元素、后处理器、断言、监听器、逻辑控制器。
运行时主要有以下几个步骤: 1、通过配置组件准备数据和环境; 2、使用采样器模拟用户请求; 3、控制运行,使用线程组设置运行场景,使用逻辑控制器来控制业务(其实就是控制采样器); 4. 收集结果,使用断言验证测试结果,并使用监听器收集并显示测试结果。
2.1.2. 数据库性能测试
可以安装需要运行Java 8或更高版本并且能够正确运行Java的操作系统。 支持的数据库有:、、DB2、MySQL、SQL、、H2、、AES等。数据库性能测试步骤如下:
1、创建测试计划、线程组:线程组表示模拟用户数、发送请求的周期数或者请求的持续时间等。
2、添加JDBC连接池配置组件:进入JDBC连接配置页面,配置数据库连接信息,如数据库URL、JDBC驱动类、数据库用户名、密码、数据库连接池连接数等属性。
3、添加JDBC采样器:在线程组元素中添加JDBC请求采样器,在JDBC请求采样器中配置连接池信息、SQL执行类型、SQL语句、SQL参数等。 测试可以使用参数来替换不同的插入记录或查询语句、查询条件等,参数可以使用简单的随机字符串或随机数,也可以准备参数化文件并读取文件中的参数值。
4.压测调试:添加结果树用于查看调试结果,并将线程数和循环数设置为较小的值。 调试运行时,需要检查JDBC请求发送内容、响应内容和结果,以判断请求是否成功。 调试运行完成后查看结果树内容。
5.压测运行:运行测试之前,需要将聚合报告监听器添加到测试计划元素或线程组元素中,聚合报告提供性能测试的聚合聚合结果。 然后在线程组元素中设置压测运行设置,根据测试需求设置并发用户数和运行时间。 压力测试设置准备就绪后,启动场景。
测试结束后,可以查看性能测试的相关指标:
请求数、响应时间(平均值、最大值、最小值、90%、95%、99%)、请求失败率、吞吐量(每秒请求数)。 另外,添加监控插件后,测试时可以监控服务器CPU、内存、磁盘IO等监控指标。
2.2.
2.2.1. 介绍
它是一个基于可定制脚本的多线程性能测试工具,主要包括CPU、磁盘IO、内存、数据库性能基准测试。 测试可以理解为对系统的性能测试。 基准测试不关心业务逻辑。 可以使用基准测试脚本来完成测试。 数据可以通过工具生成,更简单,更容易测试; 除了基准测试外,还支持定制脚本进行性能测试。
2.2.2. 数据库性能测试
它可以在 、 、 RHEL 、 和 macOS 上运行,并且自 1.0 版本以来已不再支持它。 1.0之后的版本支持MySQL。
使用OLTP基准测试来模拟简单事务处理系统的工作负载。 OLTP基准测试可以使用内置的Lua脚本。 如果想结合应用自身业务进行测试,可以使用自定义的Lua脚本进行测试。 内置Lua测试的步骤大致分为以下四步:
1、准备数据:创建需要测试的数据库,使用命令行工具通过脚本在指定数据库中创建相关表,并插入相关数据; 以下命令使用oltp.lua作为脚本在MySQL数据库表中创建数据,并插入1000条数据:
oltp.lua –oltp-table-size=1000 –mysql-user=用户名 –mysql-host=IP –mysql-=密码 –mysql-port=3306 –mysql-db=
2. 运行测试:使用命令行工具指定并发数来测试上一步创建的表和数据。 测试完成后,会生成测试结果; 下面的命令使用10个线程(–=10)测试60秒(–max-time=60),测试执行了10个基于主键的简单查询,1个范围查询,1个求和计算,1个排序查询,1次去重加排序查询,1次小字段更新,1次长字段更新,1次插入:
oltp.lua –mysql-host=IP –mysql-port=3306 –mysql-user=用户名 –mysql-=密码 –=1 –oltp-table-size=1000 –=10 — oltp -read-only=off —=10 –rand-type= –time=60 运行
运行后结果如下:
……
SQL:
:
阅读:72282
写:20652
其他:10326
全部的:
:5163(每秒 85.88)
:(每秒 1717.59)
:0(每秒 0.00)
:
总时间:60.1175s
总计:5163
(多发性硬化症):
分钟:46.34
平均:116.28
最大值:1547.41
95日:142.39
总和:.93
:
(平均/):516.3000/1.35
时间(平均/):60.0378/0.04
3、清理数据:测试结束后使用命令行工具清理创建的表和测试数据。
oltp.lua –mysql-host=IP –mysql-port=3306 –mysql-user=用户名 –mysql-=密码 –=1 –oltp-table-size=1000 –=10
测试后生成的测试结构报告主要包括以下指标:
总事务数、每秒事务数、总查询数、每秒查询数、响应时间(包括平均值、最小值、最大值、95%)。
2.3.
2.3.1. 介绍
作为开源数据库压力和基准测试工具,有图形用户界面和命令行两种形式。 支持标准TPC-C和TPC-H两种测试模式。 TPC-C测试模拟批发商的仓库管理环境,由TPC(TPC)事务处理性能委员会提出,TPC是一个非营利组织,其成员包括大多数数据库产品制造商和服务器硬件供应商。 该组织定义了一系列数据库基准测试,规范了数据库在事务处理性能方面的评估标准和评估结果,是目前业界公认的评估数据库性能的主流国际标准之一。
2.3.2. 数据库性能测试
支持Linux及系统。 支持的数据库包括,SQL、DB2、MySQL、、、Redis等。
1、准备测试数据:选择需要测试的数据库类型和使用的测试基准,点击Build中配置数据库的相关信息,然后点击build开始创建基准测试数据库。 数据创建完成后,就可以登录数据库查询相关数据(如果查询没有结果,则说明建号失败,会导致后续的负载测试失败)。
2、配置测试脚本:第一步已经创建了测试数据库tpcc,现在基于tpcc库进行oltp测试。 点击左侧列表,可以配置数据库相关信息、测试时长等。右侧会加载标准测试驱动脚本,该脚本是由左侧User配置的虚拟用户运行来执行的基准测试,脚本可根据需求修改:
3、创建虚拟用户并运行测试:指定虚拟用户数量,然后点击User下创建虚拟用户,最后运行。 这时候登录数据库,可以发现配置的虚拟用户的线程都在运行。
测试完成后,可以查看提供的监控指标:吞吐量,单位为TPM(每分钟交易数)。
2.4.
2.4.1. 介绍
它是一个基于JAVA开发的数据库性能基准测试工具,并且是免费软件。 生成数据库测试的负载,最终生成响应时间、事务数等相关测试结果图表。 前端分为三个:,,,其中是命令行模式。
包含6个基准测试程序:、、、等,可以模拟OLTP的应用场景: 1.:执行订单查询、处理、下单等操作,主要用于测试少量表; 2.:主要用于测试基于大表(从1GB到1TB)的复杂查询的性能; 3.(不推荐):模拟在线电信应用的SQL,所有基准测试程序都是CPU密集型的; 4.:用于已知表和操作测试。
另外,您还可以根据测试需求修改或添加相关SQL进行测试。
2.4.2. 数据库性能测试
它需要在Java 8上运行,任何可以正确运行Java的操作系统都可以安装。 目前支持该数据库,支持的版本有12c、18c、19c。 数据库测试步骤如下:
1.初始化测试数据:根据基准程序规则初始化测试数据。 如果使用程序初始化测试数据,请使用程序初始化测试数据。 根据向导进行配置,配置测试数据库的连接字符串//ip/sid以及用户的密码。
然后配置数据库,比如表空间的名称、表空间数据文件的路径、要创建的数据量等,并初始化测试数据。
2、基准测试:运行.bat,配置连接字符串//ip/sid、相关参数数据库的设置、比例、并发数、测试时间等,然后开始运行测试。 如下所示:
测试结束后,右下角会显示测试结果图表:每分钟事务数(TPM)、每秒事务数(TPS)、响应时间、数据库CPU、每秒执行的DML数量等。
2.5.
它是1993年11月发布的性能测试工具,作为历史悠久的商业性能测试工具,可以用于各种架构的负载测试,并且可以预测系统行为并评估系统性能。
但作为商业软件,价格较高,安装过程复杂,体积较大,过于繁琐。 在实际设计和执行压力测试时,需要编写相应的脚本。 性能测试时很难实时发现问题。
2.5.1. 介绍
它可以分为以下四个部分: 1. 虚拟用户生成器(VuGen):捕获用户业务流程,用于记录和生成性能测试脚本; 2、控制器:用于提供场景设计和场景监控,能够实时监控脚本的运行状态; 3、负载生成器:模拟用户向服务器发起请求; 4.分析器:收集并格式化来自各种负载生成器的日志报告,以可视化运行结果数据和监控数据。
2.5.2. 数据库性能测试
可运行在8.1(64位)、10(64位)、2012 R2/2016/2019(64位)、Red Hat系列Linux(含Linux)、SUSE Linux上。 支持SQL、MySQL、DB2等数据库的测试。
可以编写数据库性能测试的脚本,列出数据库相关的方法:
数据库性能测试主要有以下步骤:
1、连接数据库; 使用连接数据库时,可以内置该方法中指定的数据库连接字符串,根据要连接的数据库生成对应的连接字符串。 进行性能测试时,建议将连接数据库的步骤放在 中,断开数据库的步骤放在 中。
2.通过SQL查询获取数据或执行插入、更新、删除等操作。 下面的脚本执行表查询操作,然后获取一行的Name和city值:
()
元素(“=”,“=”,“= * FROM”,“= ds1”,最后);
(“=”,“= ds1”,“=名称”,“行=下一个”,
“=”,最后);
(“=”,“=ds1”,“=城市”,“行=”,
“=”,最后);
0;
3.验证数据库返回值是否正确:根据需要添加检查点,将验证数据库操作返回的值与比较值进行比较。 验证实际值 city 是否等于步骤 2 中查询的数据库值,如下所示:
("=", "={city}", "={ }", "=", "r=false", LAST);
4、断开数据库连接:最后需要断开数据库连接。 建议断开连接,如下图:
()
(“=”,“==MyDB;数据=;用户id=sa;=;”,“=”,“=SQL”,LAST);
0;
测试结束后,提供丰富的图形化测试结果展示,如每秒事务数(TPS)、响应时间、数据库服务器CPU使用率、内存使用率等。
3. 工具比较
针对以上工具,本文对各个工具的优缺点进行了比较和分析,如下表所示:
比较项
数据库相关测试功能结合自身业务进行性能测试 提供可结合自身业务进行性能测试的基准测试方案 提供可结合自身业务进行性能测试的基准测试方案 性能测试
系统兼容性,/macOS,1.0版本之前支持,多个版本,Red Hat系列Linux,SLES
支持数据库、MySQL、SQL等数据库
易用性 完善的在线文档,使用方便 提供在线文档,使用方便 提供在线文档,使用方便 提供在线文档,使用方便 官方文档齐全,使用复杂
安全性 不显示明文数据库密码 指定数据库明文密码 显示数据库明文密码 不显示明文数据库密码 指定数据库明文密码
易于安装和部署
图形显示测试结果是否为是
测试指标完整性 完整性优于完整性 不完整性 完整性
免费吗 是 是 否
生态与发展 社区活跃度高,更新快 社区活跃度高,更新快 社区活跃度低,更新慢且不开源,网上资料少 公司运营提供支持
4. 总结
本文介绍了五种数据库性能测试工具的背景和原理,并对工具进行了对比分析。 针对数据库性能测试结合自身业务的使用场景,支持数据库类型、易用性、安装部署、生态开发等。 更多优势; 对于基准测试的使用场景,在支持的数据库类型和测试指标的完备性方面较弱,开源社区的生态发展优于三级。 由个人开发,代码不开源,软件bug可能无法修复。 、不支持使用等风险。 因此,每种工具都有自己的优点和缺点,您可以根据自己的需求选择合适的工具。
请关注+私信回复:“测试”,即可免费获得测试开发学习路线和软件测试包,快速让自己变得更强!
好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。