mysql 慢日志文件迁移,【体系结构】MySQL 日志文件--慢查询日志

顾名思义,慢查询日志中记录的是执行时间较长的 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语句:

[[email protected] 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), [email protected]

更多用法、请咨询 ./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表

需要注意的是,慢查询日志中有可能记录到与用户权限或密码相关的语句,因此慢查询日志文件的保存也要注意安全

作者:linwaterbin 发表于2013-4-14 1:25:39 原文链接

阅读:163 评论:0 查看评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值