简介:基准测试(benchmark)是针对系统设计的一种压力测试,通常为了掌握系统的行为,或重现某个系统状态,或做新硬件的可靠性测试
测试工具:sysbench
为什么要基准测试
基准测试时唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。基准测试可以在系统实际负载之外创造一些虚构的场景进行测试
- 验证基于系统的假设,确定假设是否符合实际情况
- 重现系统中的某些异常行为,以解决这些异常
- 测试系统当前的运行情况
- 模拟比当前系统更高的负载
- 规划未来业务的增长
- 测试应用适应可变华景的能力
- 测试不同的硬件、软件和操作系统的配置
- 证明新采购的设备是否配置正确
- 应用创建单元测试套件
基准测试策略
有两种主要的策略:1.针对整个系统的整体测试(集成式(full-stack));2.单独测试Mysql(单租件式(single-component))
集成式:
- 测试整个应用系统,包括web服务器,应用代码整体性能等
- Mysql并非总是应用的瓶颈
- 只有针对整体测试,才能发现各部分之间的缓存带来的影响
- 整体应用的测试能更真实的揭露系统的表示
单组件式:
- 需要比较不同的schema或查询的性能
- 针对应用的某个问题的测试
- 避免漫长的基准测试
测试指标
吞吐量
吞吐量指的是单位时间内的事物处理数量,经典的数据库应用测试指标,测试单位 每秒事物数(TPS) 每分事物数(TPM)
响应时间或延迟
这个指标测试任务所需的整体时间,通畅使用百分比时间来替代最大响应时间。测试结果使用图表表示更容易理解
并发性
应该测试在任意时间有多少同时发生的并发请求,而非在线数
可扩展性
可扩展性帮助发现当前系统的瓶颈
指标测试应当遵循实际业务情况,而非只关心某几种指标的性能
基准测试方法
1设计和规划基准测试
a.标准的基准测试 b.设计专业的测试
- 测试时应当详细的写下测试规划,记录测试数据、系统配置的步骤,如何测量和分析结果,以及预热的方案等。
- 建立将参数和结果文档化的规范,每一轮测试都必须进行详细记录
2获取系统的性能和状态
执行基准测试时需要尽可能多收集被测试系统的信息。最好为基准测试建立一个目录,并且没执行一轮测试都创建单独的子目录,将测试结果、配置文件、测试指标、脚本和其他相关说明多保存在其中。
- 可以采取脚本方式定时获取系统状态并记录
基准测试工具
集成式测试工具
ab
ab是Apache HTTP服务器基准测试工具,可以测试http服务器每秒多少请求,只能针对单个URL进行尽可能快的压力测试
http_load
和ab类似,比ab灵活,可以通过一个输入文件提供多个url,load在这些url中随机算则进行测试,也可以定制http_load,使其按照时间比率进行测试
参数 | 含义 |
---|---|
-parallel 简写-p | 含义是并发的用户进程数。 |
-fetches 简写-f | 含义是总计的访问次数 |
-rate 简写-p | 含义是每秒的访问频率 |
-seconds简写-s | 含义是总计的访问时间 |
举个栗子:http_load -p 20 -s 10 urls.txt
返回结果:
500 fetches, 20 max parallel, 92500 bytes, in 10 seconds
185 mean bytes/connection
50 fetches/sec, 9250 bytes/sec
msecs/connect: 193.104 mean, 233.949 max, 184.651 min
msecs/first-response: 194.718 mean, 211.365 max, 186.773 min HTTP response codes:
code 200 -- 49
结果说明
1.500 fetches, 20 max parallel, 92500 bytes, in 10 seconds
说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是92500 bytes,运行的时间是10.0148秒
2.185 mean bytes/connection
说明每一连接平均传输的数据量92500/500=185
3.50 fetches/sec, 9250 bytes/sec
说明每秒的响应请求为50,每秒传递的数据为9250 bytes/sec
4.msecs/connect: 193.104 mean, 233.949 max, 184.651 min
说明每连接的平均响应时间是93.104 msecs,最大的响应时间233.949 msecs,最小的响应时间184.651 msecs
5.msecs/first-response:194.718 mean, 211.365 max, 186.773 min
6、HTTP response codes: code 200 -- 49
说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。
特殊说明:这里,我们一般会关注到的指标是fetches/sec、msecs/connect
他们分别对应的常用性能指标参数
Qpt-每秒响应用户数和response time,每连接响应用户时间。
测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,才能得出结论
JMeter
JMeter是一个java应用程序,可以加载其他应用并测试其性能,可测试web应用,ftp服务器或JDBC数据库查询测试等。
- 可以控制预热时间
- 更加灵活的模拟真实用户访问
- 拥有绘图接口
- 能够对测试进行记录
- 离线重演测试结果
单组件式测试工具
mysqlslap
可模拟服务器负载,并输出计时信息,在Mysql发行包中,测试时可以执行并发连接数,并制定sql语句
Mysql Benchmark Suite(sql-bench)
用于不同数据库服务器上进行比较测试,单线程,主要用于测试服务器的查询速度。结果会显示那种类型的操作在服务器上执行更快。缺陷较多
Super Smack
基于Mysql和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。可以模拟多用户访问、加载测试数据到数据库,并支持使用随机数据填充测试表,测试定义在“smack”文件中,它使用一种加单的语法定义测试的客户端、表、查询等测试要素。
Database Test Suite
偏工业标准的测试工具集
sysbench
多线程系统压测工具,它可以根据影响数据库服务器性能的各种因素来评估系统的性能。支持Mysql、操作系统和硬件的测试
- 测试文件I/O
- 测试操作系统调度器
- 测试内存分配、传输速度
- 测试POSIX线程
- 测试数据库服务等