一、慢sql成为系统性能瓶颈
业务系统慢,肯定是体现在响应时间上,所以在性能测试中,如果发现慢我们就从响应时间上进行拆分,最后定位到是DB层,那就分析慢SQL,同样如果在高并发时发现MySQL进程占CPU很高,也是优先分析是否存在慢SQL,而且判断慢SQL还是比较简单的,对于MySQL就是看慢日志查询。
二、开启慢日志查询
#查看是否开启,以及存放路径
show variables like '%slow_query_log%';
#开启
set global slow_query_log = 1;
#记录慢日志的时间,默认情况下为10秒
show variables like '%long_query_time%'
#查看慢日志条数
show global status like '%slow_queries%'
使用set global slow_query_log=1;
开启慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。想要永久生效,就必须修改配置文件,其实没这必要,我们都是临时开启,分析性能问题而已,分析完了,还得关了。
三、测试过程获取慢SQL
要手工分析日志,查找和分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow
#得到返回记录集最多的10个SQL
Mysqldumpslow –s r –t 10 /usr/local/mysql/data/localhost-slow.log
#得到访问次数最多的10个SQL
Mysqldumpslow –s c –t 10 /usr/local/mysql/data/localhost-slow.log
#得到按照时间排序的前10条里面含有左连接的查询
Mysqldumpslow –s t –t 10 –g “left join” /usr/local/mysql/data/localhost-slow.log
#另外建议在使用这些命令时结合|和more使用,否则可能出现爆破情况
Mysqldumpslow –s r –t 10 /usr/local/mysql/data/localhost-slow.log | more
参数含义
s: 表示按照何种方式排序
c:访问次数
l:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
t:返回前面多少条的数据
g:后面搭配一个正则表达式
四、Explain分析慢SQL
我们获取到慢SQL,当然是要实际验证一下有多慢,是否索引配置了,Explain
就能帮我们做具体分析。一般如果索引没加或是加的不合理,通过Explain
这么一分析也就能马上看出来,可以说索引问题是导致慢SQL的最主要原因之一,也是影响业务系统性能的关键因素。推荐阅读一张图彻底搞懂MySQL的 explain
五、用show profile进行sql分析
show profile是MySQL提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。
开启分析也很简单,使用临时开启执行set profiling=1
即可。
#显示是否开启Profiling,以及最多存储多少条
show variables like '%profil%';
#开启Profiling
set profiling=1;
#执行你的SQL
#在这里主要是执行前面所找到的慢SQL
#查看分析
show profiles;
网友评论