ITPub博客

首页 > 数据库 > Oracle > 【体系结构】MySQL 日志文件--慢查询日志

【体系结构】MySQL 日志文件--慢查询日志

原创 Oracle 作者:幕南风 时间:2014-07-03 13:56:53 0 删除 编辑
   顾名思义,慢查询日志中记录的是执行时间较长的 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表
   
   
   需要注意的是,慢查询日志中有可能记录到与用户权限或密码相关的语句,因此慢查询日志文件的保存也要注意安全

<!-- Baidu Button BEGIN -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1208082/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 【体系结构】MySQL 日志文件--错误日志
下一篇: 【程序员练级】提高英语阅读水平经验分享上篇
请登录后发表评论 登录
全部评论
腾讯数据库工程师

注册时间:2012-05-10

最新文章