基准测试是针对系统设计的一种压力测试,通常的目标是为了掌握系统的行为。 “永远不要相信提供商或者硬件供应商的话” —— 《高性能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慢的多

  1. SELECT @INPUT := 'CAT';
  2. SELECT BENCHMARK(100000, MD5(@INPUT));
  3. > OK
  4. > 时间: 0.059s
  5. SELECT BENCHMARK(100000, SHA1(@INPUT));
  6. > OK
  7. > 时间: 0.068s

image.png

MySQL 测试工具

当硬件服务器、或者购买云上数据库到货,我们首先需要做一次数据库的压力测试以便能够清楚清楚硬件性能;下面会介绍几款常见的测试套件。

MySQL基准测试套件 (mysqlslap)

暂时找不到资料

MySqlslap

MySQLSlap 可以用于模拟服务器的负载,并输出计时信息。其被包含在 MySQL 5.1 的发行包中

Sysbench

没错又是它,还可以对对数据库OLTP压力测试

Percona (TPCC-MySQL)

# 下载工具