zoukankan      html  css  js  c++  java
  • MySQL慢日志分析慢SQL

    慢日志

    • MySQL的慢查询日志是MySQL提供一种日志记录,它用来记录MySQL中响应时间超过阈值的语句具体指运行时间超过long_query_time值的SQL,则会被记录到慢日志中

      具体指运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中,long_query_time值默认为10,意思是运行10秒以上的语句。

    • 由他来查看哪些SQL超出了我们最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒sql,结合之前explain进行全面分析。

    • 默认情况下,MySQL没有开启慢日志,需要手动设置这个参数。当然如果不是调优需要,一般不建议启动参数,因为开启慢日志会或多或少带来一定性能影响,慢查询日志支持将日志记录写入文件。

    • 查看是否开启慢日志:默认情况下slow_query_log关闭的

      show variables like "%slow_query_log%";
      

      • 开启慢日志:

        1.终端开启:
        	set global slow_query_log=1;
        	
        但是这样开启,只是只对当前数据库生效,重启数据库MySQL 则会失效
        
        2.永久启动慢日志:
        	修改配置文件:my.cnf
            [mysqld]下增加或修改参数:
            slow_query_log=1
            slow_query_log_file=/var/lib/mysql/{host_name}-slow.log
        
    • 查看慢日志记录的阈值:默认long_query_time =10秒

      show variables like 'long_query_time%';
      

      • 修改阀值:

        1.终端修改:
        	# 更改阀值为3秒
        	set global long_query_time=3;
        需要注意的是,设置完慢sql的阀值,需要关闭窗口,重新进入窗口,输入下面命令查看是否成功设置:
        	show global variables like "long_query_time";
        2.永久配置慢日志阈值:
        	slow_query_log=1;
            slow_query_log_file=路径
            long_query_time=3;
            log_output=FILE	
        
    • 慢日志文件记录:

      • 先模拟一条查询的慢SQL语句:

        select sleep(4);
        
      • 进入慢日志查看:

        Query_time 执行时间
        use 当前库
        SET timestamp 当前时间戳
        导致问题sql语句
        
      • 查看慢日志条数:

        show global status like 'Slow_queries%';
        

    mysqldumpslow 日志分析工具

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

    • 这里在lInux系统操作:我们先看看mysqldumpslow给我们提供了什么方法

      [root@VM_0_2_centos ~]# mysqldumpslow --help
      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, ae, c, l, r, e, 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: 访问次数
      l: 锁定时间
      r: 返回记录
      t: 查询时间
      al: 平均锁定时间
      ar: 平均返回记录数
      at: 平均查询时间
      t: 即为返回前面多少条数据
      g: 后边搭配一个正则匹配模式,大小写不敏感的
      
    • 案例:

      # 得到返回记录集最多的10个SQL
      mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log
      # 得到访问次数最多的10个SQL
      mysqldumpslow -s c -t 10 /var/lib/mysql/VM_0_2_centos-slow.log
      # 得到按照时间排序的前10条里面含有左连接的查询语句
      mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/VM_0_2_centos-slow.log
      # 另外建议在使用这些命令时结合 | 和 more  使用,否则有可能出现爆屏现象
      mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log | more
      
  • 相关阅读:
    百度地图画线----可以加上起始位置和终点位置(当前例子没有加)
    android更新SDK时候丢失annotations.jar 导致支持库报错
    java批量转换图片格式
    自定义环形进度条
    第三方账号登录--QQ登录,以及QQ微博账号登录
    矩阵的基本运算,相乘,逆,转置,伴随
    中值滤波和均值滤波C++代码
    opengl 反走样 混合 多重采样 blend multisample
    四元数和欧拉角,轴角对之间的相互转化
    PHP 接口(interface) 和 抽象类(abstract class)
  • 原文地址:https://www.cnblogs.com/xujunkai/p/12496598.html
Copyright © 2011-2022 走看看