注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

MySQL:动态开启慢查询日志(Slow Query Log)  

2014-12-06 21:02:10|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

         MySQL 提供单独的日志文件记录慢查询,这个文件默认文件名为 host_name-slow.log,  但可以通过初始化参数进行配置,这里记录下临时开启慢查询的方法。

一 在日志文件中开启慢查询
--查看 slow_query_log 参数

root@localhost:francs>show variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | OFF                               |
| slow_query_log_file | /database/mysql/data/db1-slow.log |
+---------------------+-----------------------------------+

备注: slow_query_log 参数控制慢查询功能是否打开,值为on (1)/off(0),  slow_query_log_file 参数为数据库慢查询日志文件名。

--查看 long_query_time

root@localhost:francs>show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

备注: SQL 语句运行超过 long_query_time 设定的值时,语句将被记录到慢查询日志中 ,此参数单位为秒。

--设置慢查询

root@localhost:francs>set global slow_query_log=on;
Query OK, 0 rows affected (0.05 sec)

root@localhost:francs>set global long_query_time=1;
Query OK, 0 rows affected (0.00 sec)


--验证

root@localhost:francs>show variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /database/mysql/data/db1-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)

root@localhost:francs>show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

备注: 发现 long_query_time 的值没做相应的改变,网上查了下资料说是退出当前会话,重连数据库时生效。

--退出当前会话并重连

[mysql@db1 ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.6.20 Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@localhost:(none)>show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

备注:重新登陆后, long_query_time 才生效。

--验证

开启session1 执行
root@localhost:(none)>select sleep(1);
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+
1 row in set (1.00 sec)


--查看慢查询日志

[mysql@db1 data]$ tail -f db1-slow.log
....
# Time: 140818 10:50:17
# User@Host: root[root] @ localhost []  Id:    47
# Query_time: 1.000651  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1408330217;
select sleep(1);

备注:慢查询日志也可以记录到数据库表中。


二 在数据库表,文件中开启慢查询
--设置 log_output

root@localhost:mysql>show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

root@localhost:mysql>set global log_output='FILE,TABLE';
Query OK, 0 rows affected (0.00 sec)

备注: log_output 参数设定日志文件的输出,可选值为 TABLE, FILE ,NONE;  "TABLE" 意思为设定日志分别记录到 mysql 库的 general_log 和 slow_log 表中; "FILE" 意思为记录日志到操作系统的文件中, "NONE" 意思为取消日志记录。
 
--验证

root@localhost:mysql>show variables like '%log_output%';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE,TABLE |
+---------------+------------+
1 row in set (0.00 sec)

root@localhost:mysql>select count(*) from slow_log;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)


root@localhost:mysql>select sleep(1);   
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+
1 row in set (1.00 sec)

root@localhost:mysql>select count(*) from slow_log;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

root@localhost:mysql>select * from slow_log\G
*************************** 1. row ***************************
    start_time: 2014-08-18 11:21:39
     user_host: root[root] @ localhost []
    query_time: 00:00:01
     lock_time: 00:00:00
     rows_sent: 1
 rows_examined: 0
            db: mysql
last_insert_id: 0
     insert_id: 0
     server_id: 0
      sql_text: select sleep(1)
     thread_id: 47
1 row in set (0.00 sec)

备注: slow_log 表中果然有了一条 sleep(1) 慢查询日志,也可以将慢查询日志参数设置到 my.cnf 配置文件中,重启数据库重效。


三 参考
  评论这张
 
阅读(936)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017