为什么需要基准测试:
- 可以获知MySQL的工作负荷
- 获取系统对不对事物处理的性能表现
搭建的虚拟环境,远远超过现实的针对的状况 所能获取的信息 - 降低风险,模拟评估硬件需求,降低调整带来的风险
- 在环境变动时的性能表现,如不同服务配置下的并发性能、用户高峰时期,或者低峰期时的性能表现、对不同数据处理的性能等。
测试策略
- 集成式基准测试(full-stack):将整个应用作为整体来做基准测试
- 单件式基准测试(single-componet),单独测出MySQL系统
集成式基准测试的原因
- 系统也许影响性能的不是MySQL瓶颈问题
- Web服务器,网络条件,数据库,应用程序的代码都有可能影响性能, 测试不仅仅是评估MySQL的性能,而是整个系统的性能
- 整体测试可以获得系统各部分高速缓存的性能报告
- 可以获得系统真是的性能表现, 而不仅仅是MySQL部分
一些问题: 整体测试复杂,需要更多的时间,工作量,难度也更加。另外基准测试的报告数据也许不能反映真实系统的性能表现。
单件式基准测试
1.只想知道MySQL的性能:如查询(Query)、缓存(Cache)等问题
2.给出系统的一个性能快照,快速的改进系统
基准测试前,应当确认需要测试目标,这样就可以决定是用什么工具,并安排测试计划。
主要考虑一下测试度量标准评估测试目标:
1.吞吐量(throughput)
2.响应时间和延迟(Response time or latency)
通过工具和方式获取相关事务处理的最短响应时间,最长响应时间,平均响应时间,延迟时间。统计某一事务、处理某段响应时间(如1mm~2mm)的所占比例。使用统计学和数据可视化工具把数据图表化,以便于分析使用。
作 为系统的并发性一般被认为是同一时间多少用户访问网站,网站的并发量不代表MySQL数据库的并发量。 更准确的度量是某峰值时间用户同时可以产生多少并发请求。影响并发性的因素是多样的,服务器软件被指也会影响并发的性能,建站开发语言也会影响并发性能。 另外也许服务器有上千个MySQL连接,但实际上只有连接几个同时在进行查询,更新等操作而已。
4.拓展性(Scalability)
对于工作负荷量变化的系统,拓展性是非常重要的。
一般建议需要满足两倍性。 如需要提供能应付事务平均吞吐量两倍的系统,两倍的资源(如处理器,内存等)。
另外可以通过时序表(数据表,直方图,汇总表)统计响应时间,吞吐量等,作为参考度量拓展性是否满足要求。
基准测试常用工具
Full-stack tool
ab
http_load
http_load runs multiple http fetches in parallel, to test the throughput of a web server. However unlike most such test clients, it runs in a single process, so it doesn’t bog down the client machine. It can be configured to do https fetches as well.
The
Single-Component Tools
1.mysqlslap (http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html)
2.MySQL Benchmark Suite (sql-bench)
3.Super Smack
4.Database Test Suite
5.Percona’s TPCC-MySQL Tool
6.sysbench (https://launchpad.net/sysbench) is a multithreaded system benchmarking tool.
基准测试注意事项
1.忌讳:
A.100G的数据,实际上只用到1G的测试数据
B.多用户系统,只测试单用户数据
C.分布式系统,却只测试单服务器。
D.使用相同的查询数据,循环测试。实际中的查询是不可能的,这会改变数据库系统的缓存内容单数据却会被缓存
E.忽略测试错误,故障的系统的基准测试没有任何意义。
F.以及常见一些牛头不对马面的数据测试, 比如使用不真实的数据,只会浪费测试时间和资金。
G. 请不要委托免费的测试组织测试
……….
2.设计与计划
A.需要设计达到什么样,比如高并发性,高吞吐量等
B.发话太多不写了
3.怎么确定测试周期与时间多长为适宜(相信测试获得的数据,不要半途而废,那样还不如不做测试。一般测试但满意为止)
3.获取系统性能与状态
4. 获取正确的与需要信息。 (如果一时无法确认需要什么,尽可能获取足够多的数据)
5.实用工具分析,度量性能。
关于数据分析与统计学的知识,请务必掌握了解。