高性能MySQL —— 2、MySQL基准测试
1. 为什么需要基准测试
简单地说,基准测试就是针对系统设计的一种压力测试。
基准测试是唯一方便有效的、可以学习系统在给定工作负载下会发生什么。如:
- 验证基于系统的一些假设,确认假设是否符合实际;
- 重现系统异常;
- 测试系统当前运行情况;
- 找出系统随着压力增加可能遇到的拓展性瓶颈;
- 规划未来的业务增长;
- 测试应用适应可变环境的能力;
- 测试不同硬件、软件和操作系统配置;
- 验证新设备配置是否正确。
2. 基准测试的策略
主要有两种策略:一种针对整个系统的整体测试;另一种是单独测试MySQL。
整体测试:
- 用户关注的是应用整体性能,不只是MySQL;
- MySQL并非总是应用瓶颈,整体测试可以揭示这一点;
- 整体测试能够发现各部分之间缓存带来的影响;
- 更符合实际业务情况。
MySQL测试:
- 比较不同的schema或查询的性能;
- 针对某个具体问题测试;
- 通过快速的“周期循环”避免漫长的基准测试。
2.1 测试何种指标
- 吞吐量
- 响应时间或者延迟
- 并发性
- 可拓展性
3. 基准测试的方法
- 使用真实数据的全集而不是子集;
- 使用正确的数据分布;
- 使用真实的分布参数;
- 多用户场景进行多用户测试;
- 多服务器测试分布式应用;
- 与真实用户行为匹配;
- 执行不同的查询,相同查询语句MySQL会全部或部分缓存;
- 检查是否有错误产生;
- 系统预热;
- 测试服务器配置与线上保持一致;
- 基准测试需要持续一定时间,不能过短。
4. 基准测试工具
集成式测试工具:
- ab,Apache HTTP服务器基准测试工具。测试HTTP服务器每秒能处理多少请求;
- http_load,也是测试HTTP QPS,更加灵活;
- JMeter
单组件式测试工具:
- mysqlslap,可以模拟服务器负载并输出计时信息;
- MySQL Benchmark Suite,单线程测试查询速度;
- Super Smack,压力测试和负载生成;
- Database Test Suite,工业标准测试的测试工具集;
benchmark()函数
测试某些特定操作的执行速度。参数可以是执行次数和任意标量表达式。如:
// 比较md5函数和sha1函数的速度
set @input := 'hello world';
select benchmark(1000000, MD5(@input));
select benchmark(1000000, SHA1(@input));