基准测试可以说是唯一方便有效的、可以学习系统在给定工作负载下会发生什么的方法。可见基准测试的重要性,在设计基准测试前,我们要了解一下基准测试的常见错误,防止自己在测试中犯这些错误。
数据库基准测试中常见错误:
- 使用真实数据的子集而不是全集:例如真实情况下,应用需要处理100G的数据,然而在测试时,只有1G数据;或者只使用当前数据进行测试,却希望模拟未来业务大幅增长后的情况。
- 使用错误的数据分布:例如使用均匀分布的数据测试,而系统真实数据有很多热点区域(随机生成的测试数据通常无法模拟真实的数据分布)
- 使用不真实的分布参数:例如假定所有用户的个人信息都会被平均地读取。
- 在多用户场景下,只做单用户测试。
- 在单服务器上测试分布式应用。
- 与真实用户行为不匹配。例如Web页面中的“思考时间”。真实用户在请求到一个页面后,会阅读一段时间,而不是不停顿的一个接一个点击相关链接。
- 反复执行同一个查询。真实的查询都是不尽相同的,这可能会导致缓存命中率降低。而反复执行同一个查询在某种程度上,会全部或者部分缓存结果。
- 没有检查错误:如果测试的结果无法得到合理的解释,比如一个本应很慢的查询突然变快了,就应该检查是否有错误产生。否则可能只是测试了MySQL检测语法错误的速度了。基准测试完成后,一定要检查一下错误日志,这应该时基本要求。
- 忽略了系统预热(warm up)的过程。例如系统重启后马上进行测试。有时候需要了解系统重启需要多长时间才能达到正常的性能容量,要特别留意预热的时长。反过来说,如果要想分析正常的性能,需要注意,若基准测试在重启后马上启动,则缓存时冷的,还没有数据,这时即使测试的压力相同,得到的结果也和缓存已经装满数据时时不同的。
- 使用默认的服务器配置
- 测试时间太短。基准测试需要持续一段时间。