zoukankan      html  css  js  c++  java
  • 【体系结构】MySQL 日志文件慢查询日志

       顾名思义,慢查询日志中记录的是执行时间较长的 query
       可以设一个阀值、将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中
       该阀值可以通过参数long_query_time来设置、默认是10秒
       这里需要一点、对于运行时间正好等于long_query_time的情况、并不会被记录

       因为、在源代码里是判断大于long_query_time、而非大于等于

    mysql> show variables like 'log_slow_queries';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | log_slow_queries | ON    |
    +------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> show variables like 'long_query_time';
    +-----------------+-----------+
    | Variable_name   | Value     |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.00 sec)


       另一个和慢查询日志相关的参数是log_queries_not_using_indexes
       如果运行的SQL没有使用索引、则MySQL同样会将这条语句记录到慢查询日志文件

    mysql> show variables like 'log_queries_not_using_indexes';
    +-------------------------------+-------+
    | Variable_name                 | Value |
    +-------------------------------+-------+
    | log_queries_not_using_indexes | OFF   |
    +-------------------------------+-------+
    1 row in set (0.00 sec)


       在这里、我没有开启、但有点需要提醒、如果在线修改该参数、虽然没有报错、但是不会生效
       
       
       MySQL 还提供了专门用来分析满查询日志的工具程序 mysqldumpslow、用来帮助MySQL DBA解决可能存在的性能问题
       例子、获得 TOP-5 SQL语句:

    [mysql@localhost bin]$ ./mysqldumpslow -s al -n 5 /home/mysql/mysql/log/slow.log
    
    Reading mysql slow query log from /home/mysql/mysql/log/slow.log
    Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts


       更多用法、请咨询 ./mysqldumpslow --help
       
       从5.1.6版本开始,慢查询日志即可以是个文件,也可以保存在数据库中的指定表
       参数log_output指定了慢查询输出的格式、默认为file、你也可以将它设为table
       参数log_output是动态的、并且是全局的、我们能够在线进行变更

    mysql> show variables like 'log_output';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output    | FILE  |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    mysql> set global log_output='TABLE';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show variables like 'log_output';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output    | TABLE |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    mysql> select sleep(15);
    +-----------+
    | sleep(15) |
    +-----------+
    |         0 |
    +-----------+
    1 row in set (15.02 sec)
    
    mysql> select * from mysql.slow_log\G;
    *************************** 1. row ***************************
        start_time: 2013-04-14 01:22:29
         user_host: root[root] @ localhost []
        query_time: 00:00:15
         lock_time: 00:00:00
         rows_sent: 1
     rows_examined: 0
                db: test
    last_insert_id: 0
         insert_id: 0
         server_id: 1
          sql_text: select sleep(15)
    1 row in set (0.00 sec)
    


       在这个例子里、我设置了睡眠15秒、那么这句SQL就会被记录到slow_log表
       
       
       需要注意的是,慢查询日志中有可能记录到与用户权限或密码相关的语句,因此慢查询日志文件的保存也要注意安全

  • 相关阅读:
    一步一步本地化部署mapbox-gl
    快速排序
    合并排序
    冒泡排序
    选择排序
    插入排序
    mapbox-gl象形文字字体glyph生成
    前端html
    Mysql练习
    Mysql语句
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3020121.html
Copyright © 2011-2022 走看看