一、基准测试的策略
基准测试有两种主要的策略,一是针对整个系统的整体测试,另外是单独测试MySQL。这两种策略也被称为集成式和单组件式基础测试。
- 测试指标
- 吞吐量:吞吐量是指单位时间内的事务处理数。这类基准测试主要针对在线事务处理的(OLTP)吞吐量,常用的测试单位每秒事务数(TPS)或每分钟事务数(TPM),常见的标准有TPC-C。
- 响应时间或延迟:这个指标用于测试任务所需的整体时间。,通常可使用百分比相应时间来替代最大响应时间,比如PCT95,PCT99等。
- 并发性:并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。当并发性增加时,需要策略吞吐量是否下降,响应时间是否变长。可以通过sysbench指定32、64或128个线程的测试,然后在测试期间记录MySQL数据库的Threads_running状态值。
- 可拓展性:可拓展性是指,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍)。或者说给系统增加一倍的资源(比如两倍的CPU),就可以获得两倍的吞吐量。同时性能(响应时间)也必须在可接受的范围内。
二、基准测试的方法
- 规划基准测试的第一步是提出问题并明确目标,然后决定是采用标准的基准测试还是设计专用的测试。如果是采用标准的基准测试,应该确认选择了合适的测试方案。例如,不要使用TPC-H测试电子商务系统,因为TPC-H是即席查询和决策支持型应用的基准测试,不适合用来测试OLTP系统。
- 执行基准测试时,需要记录系统状态和性能指标,比如CPU利用率,磁盘IO,网络流量,
SHOW GLOBAL STATUS
计数器等。 SHOW ENGINE INNODB STATUS
和SHOW FULL PROCESSLIST
三、基准测试的工具
- 集成式测试工具
- ab: ab是一个apache HTTP服务器基准测试工具。可以测试HTTP服务器每秒可以满足多少请求。
- http_load: 和ab类似,但是比ab更加灵活,具有更多功能。
- JMeter: 设计用来测试web应用,也可以用于测试FTP服务器,或者通过JDBC进行数据库查询测试。
- 单组件式测试工具
- mysqlslap: 可以模拟服务器的负载,并输出计时信息。它包含在MySQL5.1的发行包中,在MySQL4.1之后都可以使用。
- MySQL Benchmark Suite(sql-bench): MySQL发行包中一款自带的基准测试套件,可以在不同数据库服务器上进行比较测试。好处在于包含了大量预先定义的测试,容易使用。缺点则有很多限制,比如:单用户、测试数据集小、单线程串行执行。
- Super Smack: 一款用于MySQL和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。
- Database Test Suite: 由开源软件开发实验室(OSDL)设计,一款类似某些工业标准测试的测试工具集,其中的dbt2就是一款免费的TPC-C OLTP测试工具(未认证)。
- sysbench: 一款多线程系统压测工具。
- BENCHMARK()函数: MySQL内置函数,可以测试某些特定操作的执行速度,参数是需要执行的表达式和执行次数。
如果刚刚接触基准测试,至少应该熟悉sysbench