一、测试背景
某医院有测试超融合上数据库的性能的需要,于是基于需要上门对超融合上的数据库进行了压力测试。客户用到的数据库是SQL server,业务系统是药房的进销存系统,主要想通过多用户高并发来测试数据库的性能指标。
二、测试工具
测试SQL server数据库需要用到benchmarksql工具,下面简单介绍一下benchmarksql。
BenchmarkSQL是一款经典的开源数据库测试工具,内嵌了TPCC测试脚本,可以对DB2、PostgreSQL、MySQL、Oracle以及SQL Server等数据库直接进行测试。
三、压测参数&名词
测试之前先搞清楚我们要怎么测,以及为什么要这么测,这就需要我们了解客户要测试什么类型的业务系统?这种类型的业务系统需要用到什么模型进行压测?测试的相关指标分别代表什么?
1、医院的HIS系统属于OLTP业务类型,
Online Transaction Processing联机事务处理过程(OLTP),也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。典型代表是火车票售票系统,进销存系统,医院HIS系统。
2、OLTP业务类型用到的是TPCC模型。TPCC是基于OLTP在线事务处理过程的基准程序,是模拟一个批发商的货物管理进销存系统。
3、TPCC的性能由tpmC吞吐率来衡量,其中tpm是Transactions Per Minute(每分钟处理的交易量)。TPM值在国内外被广泛用于衡量计算机系统的事务处理能力。这个数值一般是TPS*60(*TPS:Transactions Per Second(每秒传输的事务处理个数)。*事务:事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时)。简单来说,所谓事务就是用户发起的一次请求,tpmC的值就是数据库1分钟能处理多少请求,tpsC的值就是数据库1秒钟能处理多少请求。
--所以这里我们的tpmC的值是越大越好!
四、测试过程1、新建虚拟机并安装SQL server数据库软件
2、安装Java环境并新建数据库(这里新建的数据库是benchmarksqlserver)
3、关联数据库账号并配置benchmarkSQL工具
4、初始化benchmarkSQL模型(建表、加仓100、创建索引 --大概10G数据量,耗时约半个小时)
(
加仓--将数据初始化到刚才新建的数据表里)
5、开始进行压测(100并发)
(这里我们可以看到,刚开始的tpmC值是猛增的,一直飙到了4万)
(持续了一分钟,最终tpmC的值逐渐回落到3.4万,也就是最终的结果,但是这里我们可以看到在这个过程中CPU和内存的负载都不高,所以可以将并发数调高继续测试,观察tpmC还会不会增大---建议在100-200间测试)
6、对比测试150并发
(持续了一分钟,最终tpmC的值逐渐回落到3.7万,比100并发有明显的增长。说明100并发时还没达到数据库的性能瓶颈)
7、对比测试200并发
(持续了一分钟,最终tpmC的值逐渐回落到3.1万,比100并发有明显的降低。说明200并发时已经达到了数据库的性能瓶颈)
五、测试总结
1、测试条件:
虚拟机配置:16C+32G仓库数:100(相当于10G的数据量)
参数比重:new_order_weight=45(下单操作占比45%)
payment_weight=43(支付操作占比43%)
order_status_weight=4(查看订单状态操作占比4%)
delivery_weight=4(物流操作占比4%)
stock_level_weight=4(仓储操作占比4%)
2、测试结果:
并发100:tpmC=3.4万 tpsC=566.7
并发150:tpmC=3.7万 tpsC=616.7
并发100:tpmC=3.1万 tpsC=516.7
3、测试结论
在上述虚拟机的配置条件下,以并发100为例。我们的进销存数据库系统有大约10G的数据量,相当于有100个用户同时进行操作(有45人在进行下单操作,43人进行支付操作,4人在查看订单...),我们的数据库每分钟可以处理3.4万个这些请求,每秒可以处理566.7个请求。
(其他并发量同理)
六、注意
1、这里我们测试用到的是benchmarksql里自带的一个进销存业务模块,而不是客 户实际的数据库,因为如果要对客户的业务库进行压力测试,只有两个办法,找100个人同时操作来验证数据库性能(比如喊1、2、3,让100个人同时登录),或 者通过市面上专业的压测软件如IBM的loadrunner(收费),由客户业务系统的开发人员配合配置(还是拿登录举例,要配置http请求的参数,而且如果没有公有账号,还需要配置100个用户名和密码),过程相当麻烦。
2、本篇分享没有把测试的详细步骤罗列,因为benchmarksql的配置比较简单,主要是要理解配置参数的含义,搭建库的过程不是这篇分享的重点故不做展开。