zoukankan      html  css  js  c++  java
  • mysql之慢日志查询

    转自https://my.oschina.net/wuweixiang/blog/2987434

    首先得配置my.cnf:

    #====================================================================================================================#
    #================================================== 慢日志 ===========================================================#
    #====================================================================================================================#
    #是否启用慢查询
    slow_query_log = on
    #日志位置 - > 注意 目标文件夹权限, 需要 MySQL 的所有者可写; 否则会强制不启用
    slow_query_log_file = /var/lib/mysql/mysql-slow.log
    #添加此项即打开未添加索引的所有日志到慢日志中, 可不打开
    log_queries_not_using_indexes = on
    #小于此值1s会记录到慢日志 . 默认为 10s,可根据自己实际情况进行设置
    long_query_time = 1

    具体的使法如下:

    root@mysql:/# mysqldumpslow -s c -t 40 /var/lib/mysql/mysql-slow.log

    出来的结果是访问次数最多的40个sql,几个参数大概意思如下:

    -t 显示多少条
    -s 排序,默认是at。c是次数,t是时间,l是lock时间,r是返回结果。如果是ac,at,al,ar则是倒序
    -g 可以用正则匹配部分语句
    

    可以参考mysqldumpslow –help,通过这个工具可以看到哪些锁表,或者其他性能问题,还能看到某些SQL_NO_CACHE提示呢,去想办法优化把!

    root@mysql:/# mysqldumpslow --help
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "en_US.UTF-8"
        are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    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

    在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow

    -s, 是表示按照何种方式排序,

    c: 访问计数

    l: 锁定时间

    r: 返回记录

    t: 查询时间

    al:平均锁定时间

    ar:平均返回记录数

    at:平均查询时间

    -t, 是top n的意思,即为返回前面多少条的数据;

    -g, 后边可以写一个正则匹配模式,大小写不敏感的;

    比如

    得到返回记录集最多的10个SQL。

    mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

    得到访问次数最多的10个SQL

    mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

    得到按照时间排序的前10条里面含有左连接的查询语句。

    mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log

    另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。

    mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more

  • 相关阅读:
    webstorm-快捷键大全
    JavaScript-创建对象
    JavaScript-字符串的使用
    IE8 CSS hack
    jQuery-导航下拉菜单-实用简单
    jQuery-表格属性
    jQuery-图片轮播-随意切换图片
    jQuery-图片放大镜
    UVAlive3486_Cells
    SPOJ BOXES
  • 原文地址:https://www.cnblogs.com/heroinss/p/10912140.html
Copyright © 2011-2022 走看看