数据库压力测试工具Hammerdb
本文主要介绍Hammerdb在OLTP(Online Transaction Processing,联机事务处理)系统中基于TPC-C的测试方法。
数据库压力测试 Database Load Testing
数据库尤其是关系型数据库系统已经逐渐成为公司或大型企业的IT系统中最核心的部分,而最能体现数据库能力的便是数据库的性能指标。
数据库压力测试通过模拟用户真实的应用场景,为数据库性能和可扩展性的评估提供了有效的方式。通过压力测试,数据库系统厂商及用户可以了解数据库行为,从而找到提高其性能的方法,对数据库的完善和进一步开发有着指导作用。
Hammerdb 简介 Introduction
Hammerdb作为一个开源的数据库压力测试的基准工具,同时支持Linux和Windows系统,有图形用户界面(GUI)和命令行两种形式。目前支持的数据库包括Oracle, SQL Server, DB2, MySQL, MariaDB, PostgreSQL, Redis等。
Hammerdb模拟了标准的TPC-C和TPC-H两种测试模型。相比于标准的TPC-C和TPC-H,Hammerdb运行成本低,操作简单, 是服务器数据库压力测试的很好选择。
Hammerdb基于TPC-C的OLTP系统测试模拟了一个批发商的仓储管理环境,本文将对此进行介绍,新手建议先从图形界面开始,命令行的会以后再介绍。
TPC & TPC-C
TPC(Transaction Processing Performance Council): 事务处理性能委员会是一个非营利性组织,其委员会成员包括大多数主要数据库产品厂商以及服务器硬件系统供应商. 该组织定义了一系列数据库的基准,并依据这些基准测试项目向业界发布客观的TPC性能数据。更多信息可参考官方网站 TPC官网
TPC-C: 是TPC组织专门针对OLTP(Online Transaction Processing,联机事务处理)系统提出的基准规范,完全的规范了数据库在事务处理性能方面的评测标准和测评结果,是目前业界内公认的评测数据库性能的主流国际标准之一。 众厂商已发布的历史结果可以去TPC官网查看 TPC-C历史结果
然而实施一次TPC-C基准测试的成本巨大,有时会耗费上百万美金,并且耗时很长,操作过程复杂。Hammerdb在TPC-C的基础上简化了实施标准,降低了实施难度。同时由于他的开源特性,除了硬件平台的搭建,大大减少了成本。
以Oracle的测试为例,下面介绍hammerdb的使用方法。
Hammerdb系统配置 System Configuration
Hammerdb的测试需要使用server-client 配置,即两台服务器系统,一台作被测机 (System Under Test, SUT),一台作压力机 (Load Generation Client)。这两台机器需要直连或者连到同一个交换机上以确保网络通畅。被测机服务器装oracle服务器版本,压力机安装oracle客户端版本和hammerdb。
Hammerdb的安装 Installation
下载安装包 Hammerdb官网
Hammerdb支持linux和Windows系统,目前最新版本是3.0。Linux系统3.0的安装方式有两种,一种是下载安装包然后使用图形界面安装,另一种是直接下载.tar压缩文件,解压后直接运行hammerdb文件即可,这种最简单。但3.0以前的版本都需要用第一张方法安装,这里简单讲一下,以Hammerdb 2.23为例。
[oracle@hammer-client ~]$chmod +x HammerDB-2.23-Linux-x86-64-Install #添加执行权限
[oracle@hammer-client ~]$./HammerDB-2.23-Linux-x86-64-Install #运行安装包文件
选择语言,然后一直下一步就可以了
安装完成,会在指定目录下生成一个HammerDB-2.23的文件夹。
运行目录下的hammerdb.tcl即可调用Hammer DB窗口:
[oracle@hammer-client ~]$ ./hammerdb.tcl
在Linux系统, 需要配置下环境变量,加入oracle库文件的路径
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_LIBRARY=$ORACLE_HOME//lib/libclntsh.so
测试步骤 Test Method
1.加载测试数据
先选择数据库。点击菜单栏option下面的benchmark,选择想要测试的数据库
在用Hammer DB 测试TPCC 之前,需要先用Hammer DB 往数据库里加载测试数据。 数据单位是warehouse。点击左侧’Schema Build’下拉菜单中option进行选项设置。
这里的修改在下次重新打开hammerdb时便会失效,如果想要永久性修改option中的设置也可以通过修改Hammerdb目录下config/oracle.xml文件中的参数 (3.0以前版本则修改config.xml文件)。
点击'Build’或顶部的’create TPCC schema’按钮, 开始创建测试数据模型,相应的脚本会加载到脚本编辑器中。
开始创建测试数据,右边的窗口会显示输出。
Hammer DB 加载完数据完成,点击红色按钮destroy virtual users终止。
2.设置测试参数
接下来设置测试参数,即Driver Script下的Options,同样可以通过修改config/oracle.xml保存所设置参数(3.0以前版本修改config.xml文件)
每一次设置好后都需要点击load加载测试脚本到脚本编辑窗口,当然也可以直接在脚本编辑框中修改。
3.单次测试
在Virtual user下进行虚拟用户的设置,包括用户和重复次数等。Virtual user的数量跟CPU的总核数相关。选择’log Output to Temp’会把log输出到/tmp/hammerdb.log文件中。同样如果要长久保存设置修改config/generic.xml文件(3.0以前版本修改config.xml文件)
设置好了之后点击create创建用户,然后点Run就可以把测试跑起来啦
测试的结果会显示在右边的窗口中,也会保存在/tmp/hammerdb.log文件中。可以用命令快速查看多次测试结果。
[oracle@hammer-client ~]$grep TPM /tmp/hammerdb.log -B1
4.Autopilot多次测试取峰值
数据库的测试结果会随着virtual user 数的增加逐渐达到饱和。有了Autopilot这个功能,可以自动化进行多次测试。将多个virtual user的值输入,中间用空格间隔。这里设置的每跑一次的测试时间应当大于Driver script –option下设置的ramp up和正式测试的总时间。
- Transaction counter实时监测测试过程
在跑测试之前设置好transaction counter,就可以在测试的过程中实时数据库的吞吐量,有助于发现问题和系统瓶颈分析。设置好之后开始跑测试,然后点击下图按钮就可以实现监控了。
测试结果 Test Result
Hammerdb的测试结果由吞吐量(throughput)来衡量,单位为TPM (Transactions per minute)。另外标准TPC-C的单位为tpmC。
注: Hammerdb模拟但并不等同于标准的TPC-C,它的结果并不能标准的TPC-C相比
关于Hammerdb更多信息可以参考这里 Hammerdb官网文档 ,后面会介绍一下被测机端oracle的环境搭建