《高性能MySQL》笔记二:MySQL基准测试、服务器性能剖析
《高性能MySQL》笔记二:MySQL基准测试、服务器性能剖析
为什么需要基准测试?基准测试是唯一方便有效的,可以学习系统在给定工作负载下会发生什么的方法。与真实压力相比比较简单,要尽可能快地执行测试。
第二章、基准测试
1. 基准测试策略
基准测试的策略:整体测试(集成式基准测试)、单独测试(单组件式基准测试)。
集成式测试:
- 整个应用。
- MySQL并非总是应用瓶颈。
- 各部分缓存的影响。
- 应用的真实表现。
只测试MySQL:
- 需要比较不同的schema或查询的性能。
- 针对应用具体问题的测试。
- 短期基准测试快速周期循环,检测调整的效果。
测试指标:
- 吞吐量:单位时间内的事务处理数。如TPC-C。常用测试单位每秒事务数TPS。
- 响应时间或延迟
- 并发性。一个web站点,可能有50000个用户访问,却只有10个并发请求到数据库。
- 可扩展性。如给系统增加一倍的资源,就可以获得两倍的吞吐量。
2. 基准测试方法
常见错误:数据子集、错误数据分布、只做单用户、行为不匹配、反复查询同一个、没有错误检测、忽略了系统预热、使用默认的服务器配置、测试时间太短。
设计和规划:提出问题明确目标,决定是采用标准测试还是设计专用测试。
运行多长时间:足够长时间,如观察磁盘读和写吞吐量时序图,直到确认系统稳定。
获取系统性能和状态:为每一轮测试创建单独目录,保存相关结果和说明。
获取准确的测试结果。然后运行基准测试并分析结果,绘图也很重要。
3. 基准测试工具
ab:apach http服务器基准测试工具,测试http服务器每秒能够处理多少请求。
http_load
JMeter
单组件测试工具
mysqlslap:模拟服务器负载,输出计时信息。
mysql bench suite:单线程,主要测试服务器执行查询的速度。
super smack
database test suite
percona's TPCC-MySQL Tool:书作者自己写的
sysbench:多线程系统压测工具,可以根据影响服务器性能的各种因素来评估系统的性能。
MySQL的BENCHMARK函数,可以用来测试某些特定操作的执行速度。
mysql> SET @input := "leiyadi";
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT BENCHMARK(1000000,MD5(@input));
+--------------------------------+
| BENCHMARK(1000000,MD5(@input)) |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set (0.24 sec)
mysql> SELECT BENCHMARK(1000000,SHA1(@input));
+---------------------------------+
| BENCHMARK(1000000,SHA1(@input)) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.42 sec)
第三章、服务器性能剖析
本章将性能定义为完成一个任务所需要的时间。
CPU利用率上升了,可能是对资源的利用率上升了,能加快查询速度,也可能是出bug了。
要降低响应时间,首先就要测量时间花在什么地方。
性能剖析一般两个步骤:测量任务所花费时间、对结果进行排序。
类型:基于执行时间的分析(什么任务执行时间最长)、基于等待的分析(哪里阻塞最久)。
一些注意事项:
占总响应时间比重很小的查询不值得优化;成本大于收益、停止优化。
没有显式要优化的也要优化,如执行次数少但每次都特别慢的任务
性能瓶颈的影响因素:
外部资源,调用外部web服务或搜索引擎
应用需要处理大量数据,分析一个超大的xml文件
循环中执行昂贵的操作:滥用正则
使用低效的算法:暴力搜索算法