基准测试是针对系统设计的一种压力测试,通常的目标是为了掌握系统的行为。 “永远不要相信提供商或者硬件供应商的话” —— 《高性能MySQL》
- 新硬件的可靠性测试
- 基于系统的一些假设,已解决这些异常
- 测试系统当前的运行情况
- 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的扩展性瓶颈
- 规划未来的业务增长(需要什么硬件,多大的网络容量,以及其他相关资源)
- 测试适应可变环境的能力
- 测试不同的硬件,软件和操作系统配置
- 验证采购的硬件是否配置正确
基准测试的策略
一个是针对整个系统的整体测试(集成式 full-stack),另外是单独测试MySQL(单组件式sing-component)
- Centos(Debian) 操作系统的测试看xxx
- Java Web 测试参考
基础概念、以及准备工作
指标
吞吐量
吞吐量的是单位时间内的事务数量,例如TPC-C(参考:http://www.tpc.org) PS:常用的测试单位是每秒事务数(TPS)
响应时间
这个指标用于测试任务所需要的整体时间。根据具体的应用,测试的时间单位可能是微妙、毫秒、秒、分钟
并发性
并发测试通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能 PS:并发并不是指多少用户同事浏览一个Web站点的并发,而是数据库的并发
可扩展性
在系统的业务压力可能发生变化的情况下,测试数据库动态扩展的能力
总结:应该尽可能去收集一些需求,比如什么样的响应时间是可以接受的,期待多少的并发等等。然后基于这些需求来设计基准测试,避免目光短浅地只关注部分指标,而忽略其他指标。
测试方法
- 使用真实的数据的子集,而不是全集
- 使用均匀分布的数据(如果配置了,MySQL 会预热数据到缓存、SSD以及内存等)
- 使用不真实的分布参数,(假定所有用户的个人信息都会被平均地读取,真实场景可能一会增多或减少)
- 多用户场景中,只做单用户的测试
- 在单服务器上测试分布式应用
- 与真实用户符合,例如在Web页面停留的时间
- 避免反复执行用一个查询,真实场景是多用户不同的参数查询(避免反复执行会命中缓存)
- 系统需要预热
- 配置服务器配置
- 测试时间不能过短,需要测试一定的时间
PS:有时候无法确认测试时间,可以让测试一直运行持续观察直到确认系统稳定
基准测试工具
没有必要开发自己专属的测试系统,除非现有的工具确实无法满足需求。
MySQL 内置统计函数
BENCHMARK 测试特定操作的执行速度
通过
BENCHMARK
可以知道SHA1比MD5慢的多
SELECT @INPUT := 'CAT';
SELECT BENCHMARK(100000, MD5(@INPUT));
> OK
> 时间: 0.059s
SELECT BENCHMARK(100000, SHA1(@INPUT));
> OK
> 时间: 0.068s
MySQL 测试工具
当硬件服务器、或者购买云上数据库到货,我们首先需要做一次数据库的压力测试以便能够清楚清楚硬件性能;下面会介绍几款常见的测试套件。
MySQL基准测试套件 (mysqlslap)
暂时找不到资料
MySqlslap
MySQLSlap 可以用于模拟服务器的负载,并输出计时信息。其被包含在 MySQL 5.1 的发行包中
Sysbench
没错又是它,还可以对对数据库OLTP压力测试
Percona (TPCC-MySQL)
# 下载工具