• Mysql慢查询日志分析


    1.开启慢查询日志

    vim /etc/my.cnf
    
    slow-query-log = On        #开启慢查询
    slow_query_log_file = /data/mysql/mysql_slow_query.log        #定义慢查询日志的路径 
    log_output = FILE      #设置日志输出到文件,默认为输出到table
    long_query_time = 5        #定义查过多少秒的查询算是慢查询
    log_queries_not_using_indexes = ON    #记录下没有使用索引的query
    
    

    2.查询慢查询日志是否开启

    set global long_query_time=5;    //设置成5秒,
    set slow_query_log='ON';    //加上global
    set global slow_query_log='ON';   //启用慢查询
    set global log_output = 'file';  //日志输出到文件
    set global slow_query_log_file='/data/mysql/mysql_slow_query.log';  //日志输出路径
    show variables like "%slow%";   //查看是当前会话的变量值,没生效需要断开重新连接
    show global variables like 'long_query_time';  //直接查看
    
    show variables like "%slow%";  // 查看是否已经打开了慢查询
    结果分析:
        slow_query_log 的值为ON 为开启慢查询日志,off表示关闭慢查询日志
        slow_query_log_file 的值是记录的慢查询日志到文件中(默认为主机名.log)
        slow_launch_time 是thread create的一个阈值,thread create的时间超过了这个值,这变量slow_launch_time的值加1.
        long_query_time 指定了慢查询的阈值,即执行语句的时间若超过这个值则为慢查询语句
        log_queries_not_using_indexes 如果该值是ON,则会记录所有没有利用索引来进行查询的语句,前提是slow_query_log 的值也是ON,否则,不会奏效
    

    3.慢查询日志分析

    mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

    mysqldumpslow语法说明:
        -s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
        al: average lock time 平均锁定时间
        ar: average rows sent 平均返回行数
        at: average query time 平均查询时间
        c: count 总执行次数
        l: lock time 总锁定时间
        r: rows sent 总返回行数
        t: query time 总查询时间
        -t ,show the top n queries,显示前多少名的记录
        -a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。
        -g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。
        -l ,总时间中包含锁定时间
    

    4.使用示例

    // 返回记录最多的十个查询
    mysqldumpslow -s r -t 10 slow.log
    
    // 查询10条执行时间最慢的sql语句
    mysqldumpslow -s t -t 10 slow.log
    
    // 平均锁定时间最长的前10条SQL
    mysqldumpslow -s al -t 10  slow.log
    
    // 执行次数最多的前10条SQL
    mysqldumpslow -s c -t 10  slow.log
    
    // 平均执行时间最长的前10条SQL
    mysqldumpslow -s at -t 10 slow.log
    
    // 得到按照时间排序的前10条里面含有左连接的SQL:
    mysqldumpslow -s t -t 10 -g "left join" slow.log
    

    5.慢查询语句

    select * from mysql.slow_log;   #查询所有慢查询
    select * from mysql.slow_log order by start_time desc limit 10;       #查询最新的10条慢查询
    

    6.日志内容

    -- 执行SQL时间
    # Time: 2019-12-31T05:54:23.893042Z
    -- 执行SQL的主机信息
    # User@Host: root[root] @ localhost []  Id:    40
    -- SQL的执行信息
    # Query_time: 4.013664  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
    -- SQL执行时间
    SET timestamp=1577771659;
    -- SQL内容
    select sleep(4);
    

    7.阿里云RDS慢查询分析


    8.binlog查看

    1.查看bin log日志名
    show binary logs;
    
    2.下载binlog
    阿里云的RDS =》备份恢复 =》日志备份,下载对应时间的binlog
    
    3.解密binlog文件
    mysqlbinlog -vv --base64-output=decode-rows ../data/mysql-bin.00218 > d:/tt.txt
    
    sed -n '/23:28:32/,/23:33:32/p' myslq-bin-1027.log > sed.log
    

    相关链接

    https://mhl.xyz/MySQL/mysqldumpslow.html

    【励志篇】: 古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。
  • 相关阅读:
    ionic serve 报【ionic-app-scripts' 不是内部或外部命令 】问题解
    Angular4.x+Ionic3 踩坑之路之打包时出现JAVASCRIPT HEAP OUT OF MEMORY的几种解决办法
    webpack打包---报错内存溢出javaScript heap out of memory
    IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
    详解Intellij IDEA中.properties文件中文显示乱码问题的解决
    PostgreSQL判断一个表是否存在
    关于Hadoop结合RDBMS应用的一些思考
    hadoop的hdfs文件操作实现上传文件到hdfs
    用hdfs存储海量的视频数据的设计思路
    hbase+hive应用场景
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/13884673.html
Copyright © 2020-2023  润新知