MySQL慢查询日志总结( 二 )
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |+---------------------+-----------------------------------------------+2 rows in set (0.00 sec) mysql>
使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效 。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此) 。例如如下所示:
mysql> show variables like 'slow_query%';+---------------------+-----------------------------------------------+| Variable_name | Value |+---------------------+-----------------------------------------------+| slow_query_log | OFF || slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |+---------------------+-----------------------------------------------+2 rows in set (0.01 sec) mysql>

文章插图
修改my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器,如下所示
slow_query_log =1
slow_query_log_file=/tmp/mysql_slow.log

文章插图
mysql> show variables like 'slow_query%';+---------------------+---------------------+| Variable_name | Value |+---------------------+---------------------+| slow_query_log | ON || slow_query_log_file | /tmp/mysql_slow.log |+---------------------+---------------------+2 rows in set (0.00 sec) mysql> 关于慢查询的参数slow_query_log_file ,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话)
mysql> show variables like 'slow_query_log_file';+---------------------+-----------------------------------------------+| Variable_name | Value |+---------------------+-----------------------------------------------+| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |+---------------------+-----------------------------------------------+1 row in set (0.00 sec)
那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? 这个是由参数long_query_time控制,默认情况下long_query_time的值为10秒,可以使用命令修改,也可以在my.cnf参数里面修改 。关于运行时间正好等于long_query_time的情况,并不会被记录下来 。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于 。从MySQL 5.1开始,long_query_time开始以微秒记录SQL语句运行时间,之前仅用秒为单位记录 。如果记录到表里面,只会记录整数部分,不会记录微秒部分 。
mysql> show variables like 'long_query_time%';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.00 sec) mysql> set global long_query_time=4;Query OK, 0 rows affected (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)
如上所示,我修改了变量long_query_time,但是查询变量long_query_time的值还是10,难道没有修改到呢?注意:使用命令 set global long_query_time=4修改后,需要重新连接或新开一个会话才能看到修改值 。你用show variables like 'long_query_time'查看是当前会话的变量值,你也可以不用重新连接会话,而是用show global variables like 'long_query_time'; 如下所示:
推荐阅读
- mysql查询太慢,我们如何进行性能优化?
- 聊聊Mysql索引和redis跳表
- 家里无线网络每天不定时段出现网速很慢或者直接无连接,这是怎么回事?
- 慢性盆腔蜂窝织炎
- MySql安装全攻略,如果想好好学习,一篇就够了
- 线上 MySql 事务死锁,应该怎么排查解决?
- 新手教程,Linux系统下MySQL的安装
- 世界上跑得最慢的马?世界上什么马跑得最快
- JDBC+MySQL入门增删改查实战
- 搭建mysql主从并用springboot读写分离-含源码