目录
3.1通过性能剖析进行优化
性能剖析是测量和分析时间花费在哪里的主要方法。一般由两个步骤:测试任务所花费的时间;然后对结果进行统计和排序,将重要的任务排在前面。
mysql的性能剖析能将重要的任务展示在前面,但是有时没显示出来的信息也很重要,如下所示:
值得优化的查询
性能剖析不会自动给出哪些查询是值得花时间去优化的,另外当优化成本大于收益时,应该停止优化
异常情况
某些任务即使咩有出现在性能剖析输出的前面也需要优化,比如某些任务执行次数很少,但是每次执行慢,严重影响用户体验。
被隐藏的细节
性能剖析无法显示所有响应时间分布,只相信平均值时非常危险的,在操作里有可能一两个查询响应时间很高,这些都是无法显示出来的
3.2对应用程序进行性能剖析
剖析应用程序一般比剖析数据库要简单得多,而且汇报大。
性能瓶颈可能有很多影响因素:
- 外部资源,比如调用了外部的web服务或者搜索引擎;
- 应用需要处理大量的数据,比如分析一个超大的xml文件;
- 在循环中执行昂贵操作,比如滥用正则表达式;
- 使用低效的算法;
3.3剖析服务器负载
- 捕获MySQL的查询到日志文件中
在当前mysql版本中,慢查询日志是开销最小的,精度最高的测量查询时间工具,在IO密集型场景下,慢查询日志带来的开销几乎忽略不计,但是需要关心的时日志可能会消耗大量的磁盘空间,长期开慢查询日志的话,注意要部署日志轮转工具,或者定时开慢查询。
- 剖析单条查询方法
- 使用 SHOW PROFILE
设置 set profiling=1;然后在服务器执行的所有语句,都会测量其耗费的时间以及查询操作耗时,show profiles可以显示耗时,如:
但是问题来了,我们只能看到总的耗时,我们要是需要查询查询过程的耗时可以使用show profile for query 1;
这份报告给出查询执行的每个步骤需要花的时间,看结果可以确定哪个步骤耗时最多。
2.使用SHOW STATUS
mysql的SHOW STATUS返回一些计数器,show global status 可以查看服务器级别的从服务器启动时开始计算的查询次数统计。
3.使用SHOW PROCESSLIST
这个方法是通过不停地捕获SHOW PROCESSLIST的输出,来观察是否有大量线程处于不正常的状态或者有其它不正常特征。
4.使用查询日志
如果要通过查询日志发现问题,需要开启慢查询日志并在全局级别设置long_query_time 为0,并且要确定所有的连接都采用了新设置。
- IO利用率奇高
原因可能有两种情况:要么数据库io,要么系统缺少io资源影响数据库性能
什么情况导致性能低下:
- 资源已经被过渡使用,余量不足以正常公众;
- 资源没有被正确配置
- 资源应景选坏或者失灵
总结:
- 我们认为定义性能最有效的是响应时间
- 测量的最佳启点是应用程序
- 完整测试产生大量需要分析的数据
- 有两种消耗时间的操作:工作或者等待
相信大家看完肯定是糊里糊涂的,后面会专门开一章来讲解如何配置优化服务器。
前3章序言算是完了,接下来的7章讲相关的实用技巧了