Mysql日志--缓慢指令日志

来源:互联网 发布:网络自制剧排行榜 编辑:程序博客网 时间:2024/05/29 09:47

默认情况下长时间是指超过10秒钟,时间值可以通过long_query_time进行修改。如果服务器性能本来就很高,应该在五秒内就可以执行完,那么可以把这个值设置为5秒,相反如果性能比较低,平时执行的查询都要一秒两秒,那么就可以将这个值调高一点。

 

[root@localhost /]# 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这个选项将缓慢查询日志的功能开启。

[root@localhost /]# 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文件,这个文件就是缓慢查询的日志文件。

[root@localhost /]# 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

再查看,可以看到缓慢查询日志已经开启。

 

对该日志进行监控

[root@localhost /]# 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)

再去日志里面看看

[root@localhost /]# 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

# User@Host: 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秒。只有超过这个值就会被记录到缓慢日志里面。

 

如何调整这个值

[root@localhost /]# 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)

 

[root@localhost test]# tail -f /var/lib/mysql/localhost-slow.log

# User@Host: 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

# User@Host: 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秒钟的查询也会被记录到缓慢日志文件里面。

 

在平时服务器性能比较低下,可以开启缓慢查询日志将查询时间最长的前十条记录取出来进行优化。

 

 


原创粉丝点击