数据库压测工具HannerDB

又一款数据库压测工具

介绍

上次因公司业务需要使用新数据库,为保持换上之后业务稳定运行,需要压测对比结果,找了两款并没很好的测出想要的统一对比指标,偶尔发现这款数据库压测工具,方便好用。

软件官网

GitHub

标准官方文档,内容相当丰富

支持win和linux平台,支持docker部署,linux和docker最终还是需要界面展示(xwindow等)支持,所以这里干脆直接用win版测试,如果需要测试的数据库服务只有内网环境,又没有可以用来测试的win服务器,用后面两种比较合适。

支持压测数据库类型:MySQL,MariaDB,PostgreSQL,Redis,MSSQLServer,Oracle.Db2

这里只压测MySQL做为测试。

压测不同类型数据库,需要有统一的测试指标吧,运行同样的SQL,同等数据量,同等并发、用户量等,这里介绍下测试基准 TPC比较重要的两项:

压测基准

TPC-C:

TPC Benchmark C于1992年7月获得批准,是一个在线事务处理(OLTP)基准。 与TPC-A等以前的OLTP基准测试相比,TPC-C更复杂,因为它具有多种事务类型,更复杂的数据库和整体执行结构。 TPC-C涉及五个不同类型和复> 杂性的并发事务的混合,这些事务可以在线执行或排队等待延迟执行。 该数据库由九种类型的表组成,具有广泛的记录和人口规模。 TPC-C以每分钟事务数(tpmC)衡量。 虽然基准描述了批发供应商的活动,但TPC-C并不限于任何特定业务领域的活动,而是代表必须管理,销售或分销产品或服务的任何行业。
百科介绍:https://baike.baidu.com/item/TPCC/10023747?fr=aladdin

TPC-H:

TPC Benchmark™H(TPC-H)是决策支持基准。 它由一套面向业务的即时查询(ad-hoc)和并发数据修改组成。 选择查询和填充数据库的数据具有广泛的行业相关性。 该基准测试说明了决策支持系统,该系统可检查大量数> 据,执行高度复杂的查询并为关键业务问题提供答案。 TPC-H报告的性能指标称为TPC-H每小时综合查询性能指标(QphH @ Size),它反映了系统处理查询能力的多个方面。 这些方面包括执行查询时所选择的数据库大小,单> 个流提交查询时的查询处理能力以及多个并发用户提交查询时的查询吞吐量。 TPC-H价格/性能指标

TPC-H是一款面向商品零售业的决策支持系统测试基准,它定义了8张表,22个查询,遵循SQL92;TPC-H基准的数据库模式遵循第三范式。新兴的数据仓库开始采用新的模型,如星型模型、雪花模型。TPC-H已经不能精准反映当> 今数据库系统的真实性能。为此,TPC组织推出了新一代的面向决策应用的TPC-DS 基准。

TPC还有一系列的针对不同业务场景测试基准,TPC官网可以看到定义:

由于TPC定义的测试基准比较复杂,这里HammerDB的 TPROC-CTPROC-H 基准都是TPC基准上为更方便测试、更低的成本实现的。

了解了上面的测试基准,才能更好的输入测试参数来达到真实模拟测试效果以及每个输入。

开测

Building the Schema

建立数据库连接

这里的虚拟用户 VisualUser 数量,等实际压测结果会比设定的多一个。注意用户一定要有建库建表权限。

建库、建表、建立测试数据

点机开始之后,这里可以看到每个用户进程正在执行的事务

这里可以看到创建 Warehouse 的 tpm

创建成功

根据大佬给的脚本可以看到创建成功后的库数据

1
2
3
4
5
6
7
8
9
10
11
12
13
select a.SCHEMA_NAME, a.DEFAULT_CHARACTER_SET_NAME,a.DEFAULT_COLLATION_NAME,
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)',
sum(truncate((data_length+index_length)/1024/1024, 2)) as '总大小(MB)',
sum(truncate(max_data_length/1024/1024, 2)) as '最大值(MB)',
sum(truncate(data_free/1024/1024, 2)) as '空闲空间(MB)'
from INFORMATION_SCHEMA.SCHEMATA a
left outer join information_schema.tables b
on a.SCHEMA_NAME=b.TABLE_SCHEMA
where a.SCHEMA_NAME='tpcc'
group by a.SCHEMA_NAME, a.DEFAULT_CHARACTER_SET_NAME,a.DEFAULT_COLLATION_NAME
order by sum(data_length) desc, sum(index_length) desc;

查看服务器主机性能

这里用了htop , 可以用其他工具

Run a Test Workload

开启正儿八经压测

两个选项,分别对应直接跑完脚本,一个是跑固定时间结束,选完之后点击Load加载脚本,点击Run Virtual Users 图标开始测试,我的虚拟机性能不高,这个测试客户端已经卡的不行了,但服务器性资源占用倒不高。虚拟用户创建可以在Driver Script 下面的菜单新建。

官网最新win版压测MySQL驱动会有些问题,据说是Tcl的版本与MySQL驱动依赖包版本不对应,需要更换MySQL驱动dll, HammerDB-4.5\lib\mysqltcl3.052\libmysql.dll,报错界面忘记截图,具体下载位置自行百度。后来发现HammerDB官方文档已经写的很清楚了。


数据库压测工具HannerDB
https://blog.wongcw.cn/2022/09/19/数据库压测工具hammerDB/
作者
wangcw
发布于
2022年9月19日
许可协议