Mysql日志--缓慢指令日志
默认情况下长时间是指超过10秒钟,时间值可以通过long_query_time进行修改。如果服务器性能本来就很高,应该在五秒内就可以执行完,那么可以把这个值设置为5秒,相反如果性能比较低,平时执行的查询都要一秒两秒,那么就可以将这个值调高一点。
[[email protected] /]# mysqld --help --verbose | grep log-slow
--slow-launch-time=#
--slow-query-log Log slow queries to a table or log file. Defaults logging
to a file hostname-slow.log or a table mysql.slow_log if
other slow log options
--slow-query-log-file=name
Log slow queries to given log file. Defaults logging to
hostname-slow.log. Must be enabled to activate other slow
log-slow-admin-statements FALSE
log-slow-slave-statements FALSE
slow-launch-time FALSE
slow-query-log FALSE
可以看到这个选项值是false,默认情况下缓慢查询日志是不开启的。所以在/etc/my.cnf里面加上slow-query-log这个选项将缓慢查询日志的功能开启。
[[email protected] /]# ls /var/lib/mysql
auto.cnf localhost-bin.index mysqld-bin.000001 mysql.sock
ibdata1 localhost.log mysqld-bin.000002 performance_schema
ib_logfile0 localhost-slow.log mysqld-bin.000003 test
ib_logfile1 mysql mysqld-bin.index
将mysql服务重启,切换到mysql的数据目录夹下面可以看到多了一个localhost-slow.log文件,这个文件就是缓慢查询的日志文件。
[[email protected] /]# mysqld --help --verbose | grep log-slow
log-slow-admin-statements FALSE
log-slow-slave-statements FALSE
slow-launch-time 2
slow-query-log TRUE
slow-query-log-file /var/lib/mysql/localhost-slow.log
再查看,可以看到缓慢查询日志已经开启。
对该日志进行监控
[[email protected] /]# tail -f /var/lib/mysql/localhost-slow.log
/usr/sbin/mysqld, Version: 5.6.38-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
初始的时候日志里面什么内容都没有。
在另外一个终端登入mysql
mysql> select sleep(11); 这个语句会休眠11秒再完成。
+-----------+
| sleep(11) |
+-----------+
| 0 |
+-----------+
1 row in set (11.01 sec)
再去日志里面看看
[[email protected] /]# tail -f /var/lib/mysql/localhost-slow.log
/usr/sbin/mysqld, Version: 5.6.38-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 171026 14:36:43
# [email protected]: root[root] @ localhost [] Id: 2
# Query_time: 11.002971 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1508999803;
select sleep(11);
可以看到超过十秒的语句被记录在缓慢查询日志当中。
mysql> select sleep(5);
+----------+
| sleep(5) |
+----------+
| 0 |
+----------+
1 row in set (5.00 sec)
注意如果查询的时间小于10秒是不会被记录到缓慢查询日志当中的。
mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
可以看到指定的缓慢查询的时间为10秒。只有超过这个值就会被记录到缓慢日志里面。
如何调整这个值
[[email protected] /]# mysqld --help --verbose | grep long
long-query-time 10
performance-schema-consumer-events-stages-history-long FALSE
performance-schema-consumer-events-statements-history-long FALSE
performance-schema-consumer-events-waits-history-long FALSE
performance-schema-events-stages-history-long-size -1
performance-schema-events-statements-history-long-size -1
performance-schema-events-waits-history-long-size -1
在my.cnf配置文件里面加上long-query-time=5,超过五秒的查询都会记录下来。
重启之后再连接数据库进行查询。
mysql> select sleep(6);
+----------+
| sleep(6) |
+----------+
| 0 |
+----------+
1 row in set (6.01 sec)
[[email protected] test]# tail -f /var/lib/mysql/localhost-slow.log
# [email protected]: root[root] @ localhost [] Id: 2
# Query_time: 11.002971 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1508999803;
select sleep(11);
/usr/sbin/mysqld, Version: 5.6.38-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
/usr/sbin/mysqld, Version: 5.6.38-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 171026 15:01:10
# [email protected]: root[root] @ localhost [] Id: 2
# Query_time: 6.010773 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1509001270;
select sleep(6);
可以看到6秒钟的查询也会被记录到缓慢日志文件里面。
在平时服务器性能比较低下,可以开启缓慢查询日志将查询时间最长的前十条记录取出来进行优化。