• Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解


    Mysql慢查询开启

    Mysql的查询讯日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应时间超过阈值的语句,具体指运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中。long_query_time的默认为10,意识是运行10秒以上的语句。由它来看那些SQL语句超出了我们的最大忍耐值,比如一条SQL执行超过了5秒,我们就算慢查询,我们就可以结合Explain进行分析。
    默认Mysql没有开启慢查询,需要我们说动设置这个参数。当然,如果不是调优需要的话,一般不建议开启该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志写入文件。
    进入mysql终端查看是否开启(我这里都是自己改过的)

    MySQL [test_db]> show variables like '%slow_query_log%'; +---------------------+----------------------------+
    | Variable_name       | Value                      |
    +---------------------+----------------------------+
    | slow_query_log      | ON                         |
    | slow_query_log_file | /data/mysql/mysql-slow.log |
    +---------------------+----------------------------+

    上面查询结果第一行,这里是开启的,第二行是默认查询路径文件名。

    MySQL [test_db]> set global slow_query_log = 0|1; //设置开启或者关闭,0为关闭,1为开启

    如果使用set global slow_query_log 命令开启慢查询日志,只对当前数据库生效,如果Mysql重启后则会失效。
    补充:如果通过终端命令设定的话,再查询是看不到修改结果的,需要新开启一个窗口查看即可。
    如果要永久生效,必须修改配置文件,修改完记得习惯性重启服务。还是那句话,不建议生产环境开启。

    [mysqld] slow_query_log = 1 long_query_time = 1 slow_query_log_file = /data/mysql/mysql-slow.log
    MySQL [test_db]> show variables like 'long_query_time'; +-----------------+----------+
    | Variable_name   | Value    |
    +-----------------+----------+
    | long_query_time | 1.000000 |
    +-----------------+----------+

    假如SQL运行时间刚好等于long_query_time的情况,并不会被记录下来,也就是说,在Mysql源码里是判断大于long_query_time,而非大于等于

    开始测试(在开启慢查询的情况下)

    MySQL [test_db]> select sleep(5);

    查看慢查询日志文件

    # cat /data/mysql/mysql-slow.log # # select sleep(5); # Time: 2018-01-20T18:10:24.443517Z # User@Host: root[root] @ localhost [] Id: 3 # Query_time: 5.000564 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use test_db; SET timestamp=1524276624; select sleep(5);

    以上信息包括实际查询时间5.000564秒,时间戳timestamp=1524276624,还有库test_db,出问题的SQL。

    mysqldumpslow用法讲解

    上面测试的慢查询SQL只有一条,假如在实际的生产环境中,慢查询SQL远远高于测试的数量,十几条甚至几十条,假如几条慢查询出现的频率很高,我们能做到根据轻重优先级来分析并排除那是不是更好?那么就用到了mysqldumpslow

    # mysqldumpslow --help ----------------------------------------------------//执行命令 Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL slow query log. Options are --verbose verbose --debug debug --help       write this text to standard output -v verbose -d debug -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default al: average lock time ar: average rows sent at: average query time c: count l: lock time r: rows sent t: query time -r reverse the sort order (largest last instead of first) -t NUM just show the top n queries -a           don't abstract all numbers to N and strings to 'S'   -n NUM       abstract numbers with at least n digits within names -g PATTERN   grep: only consider stmts that include this string
      -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard), default is '*', i.e. match all -i NAME      name of server instance (if using mysql.server startup script) -l           don't subtract lock time from total time

    s:是表示按照何种方式排序
    c:访问次数
    i:锁定时间
    r:返回记录
    t:查询时间
    al:平均锁定时间
    ar:平均返回记录数
    at:平均查询时间
    t:即为返回前面多少条数据
    g:后边搭配一个正则匹配模式,大小写不敏感

    mysqldumpslow -s r -t 10 /data/mysql/mysql-slow.log  //得到返回记录集最多的10个SQL
    mysqldumpslow -s c -t 10 /data/mysql/mysql-slow.log //得到访问次数最多的10个SQL 
    mysqldumpslow -s t -t 10 -g "left join" /data/mysql/mysql-slow.log  //得到按照时间排序的前10条里面含有做了连接的查询SQL
    mysqldumpslow -s r -t 10 /data/mysql/mysql-slow.log | more  //另外建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况

    OK~既然学习了,就运用到实际工作中吧~

  • 相关阅读:
    【Redis】数据介绍 & 通用命令 & String类型
    【JavaScript】基础语法笔记(对比Java)
    [附源码]Python计算机毕业设计SSM建筑材料采购管理系统(程序+LW)
    【Spring面试】Spring事务(图文详解)
    Vue中 引入使用 element-resize-detector 监听 Dom 元素 宽度、高度 变化
    【mysql索引实现原理】
    RepVGG 核心讲解
    Error creating bean with name 'xImpl': Unsatisfied dependency expressed through field 'baseMapper'
    力扣刷题 每日两题(一)
    C++ 多態筆記
  • 原文地址:https://blog.csdn.net/m0_62089210/article/details/126799882