2020 年 6 月 19 日 服务器性能剖析
最常碰见的三个性能相关的服务的请求是:1、如何确认服务器是否达到了性能最佳的状态。2、找出某条语句为什么执行的不够快。3、诊断被用户描述成“停顿”、“堆积”或者“卡死”的某些间歇性故障
1、性能优化简介
我们将性能优化定义为完成任务所需要的时间度量,换句话说,性能即响应时间。
数据库服务器的目的是执行SQL语句,所以它关注的任务是查询或者语句。
数据库服务器的性能用查询的响应时间来度量,单位是每个查询花费的时间。
优化的第一步就是测量时间花费在了什么地方。
完成一项任务所需要的时间可以分为两部分:执行时间和等待时间。
1、通过性能剖析进行优化
性能剖析是测量和分析时间花费在哪里的主要方法。性能剖析一般有两个步骤:测量任务所花费的时间;然后对结果进行统计和排序,将重要的任务排在前面。
我们重点关注两种类型的性能剖析:基于执行时间的分析和基于等待的分析。
基于执行时间的分析研究的是什么任务的执行时间最长
基于等待的分析则是判断任务在什么地方被阻塞的时间最长
2、理解性能剖析
MySQL的性能剖析将最重要的任务展示在前面,但有时候没有显示出来的信息也很重要。
1、值得优化的查询,性能剖析不会自动给出哪些查询值得花时间去优化。第一,一些只占总响应时间比重很小的查询是不值得优化的。第二,如果优化的成本大于收益,就不值得去优化。
2、异常情况:某些任务即使没有出现在性能剖析的前面也需要优化
2、对应用程序进行性能剖析
剖析应用程序一般比剖析数据库服务器要容易,而且回报更多。
性能瓶颈可能有很多影响因素:
1、外部资源,比如调用了外部的Web服务器或者搜索引擎
2、应用需要处理大量的数据
3、在循环中执行昂贵的操作,比如滥用正则表达式
4、使用低效的算法
3、剖析MySQL查询
1、剖析服务器负载
服务器端的剖析很有价值,因为在服务器端可以有效地审计效率低下的查询。定位和优化“坏”查询能够显著提升应用的性能,也能解决特定的难题。
捕获MySQL的查询到日志文件中,在MySQL5.1及更新的版本中,慢日志的功能已经被加强,可以通过设置long_query_time为0来捕获所有的查询。
在MySQL中慢查询日志是开销最低、精度最高的测量查询工具
慢查询日志是一种轻量而且功能全面的性能剖析工具,是优化服务器查询的利器。
分析查询日志:
强力建议从现在开始使用慢查询日志捕获服务器上的所有查询。
而且不要直接打开整个慢查询日志进行分析,这样做只会浪费时间和金钱。首先应该生成一个剖析报告,可以利用pt-query-digest分析MySQL查询日志,该工具功能强大可以将报告保存在数据库中,以及追踪工作负载随时间的变化。
一般情况下,只需要将慢查询日志文件作为参数传递给pt-query-digest,就可以正确地工作了
2、剖析单条查询
主要是介绍如何方便地测量查询执行的各部分花了多少时间,有了这些数据才能决定采用何种优化技术。
在实际应用中,SHOW STATUS ,SHOW PROFILE 、检查慢查询日志的条目是最可靠的三种方法。
SHOW PROFILE: 命令默认是禁用的,但是可以通过服务器变量在会话级别动态地修改。
mysql> SET profiling=1;
SHOW STATUS: 是一个有用的工具,但并不是一款剖析工具。SHOW STATUS 的大部分结果都只是一个计数器,可以显示某些活动如读索引的频繁程度,但无法给出消耗了多少时间。
4、总结
定义性能最有效的方法是响应时间
如果无法测量就无法有效的优化,所以性能优化工作基于高质量、全方位及完整的响应时间测量
测量最佳开始点是应用程序,而不是数据库
完整的测量会产生大量需要分析的数据,所以需要用到剖析器。这是最佳的工具,可以帮助将重要的问题冒泡到前面
剖析报告是一种汇总信息,掩盖和丢弃了太多细节
有两种消耗时间的操作:工作或者等待。大多数剖析器只能测量因为工作而消耗的时间,所以等待分析有时候是很有用的补充
优化和提升是两回事。当继续提升的成本超过收益的时候,应停止优化
如果你想尝试提升服务器的总体性能,那么一个比较好的起点是将所有查询记录到日志中,然后利用pt-query-digest 工具生成系统级别的剖析报告。
可以把精力放在寻找那些消耗时间最多的、导致了糟糕的用户体验的,或者高度变化的,抑或有奇怪的响应时间直方图的查询。
当找到了这些坏的查询时,要钻取pt-query-digest报告中包含的该查询的详细信息,或者使用SHOW PROFILE 以其他诸如EXPALIN这样的工具。
版权声明: 本文为 InfoQ 作者【瑞克与莫迪】的原创文章。
原文链接:【http://xie.infoq.cn/article/109cd3f0d75ba07b1e29e02fa】。文章转载请联系作者。
评论