美文网首页
慢SQL定位分析

慢SQL定位分析

作者: AC编程 | 来源:发表于2021-12-02 21:24 被阅读0次

    一、慢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;
    

    相关文章

      网友评论

          本文标题:慢SQL定位分析

          本文链接:https://www.haomeiwen.com/subject/eteuxrtx.html