【MySQL】慢查询日志

什么是慢查询日志


MySQL慢查询日志用于记录在MySQL中响应时间超过设置值long_query_time值的SQL,会被记录在慢查询日志中。默认情况下MySQL是不开启慢查询的,因为开启慢查询肯定会带来性能的影响,关于如何让开启慢查询日志请往下看。


为什么需要慢查询日志

我们不可能做到对所有的SQL都使用EXPLAIN语句来分析SQL的执行情况,使用慢查询日志则可以更方便我们对MySQL进行调优。

使用慢查询日志


MySQL启动慢查询的参数:

slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭。

slow-query-log-file:慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

long_query_time :慢查询阈值,当查询时间多于设定的阈值时就记录日志。

log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中。

log_output:日志存储方式。'FILE'表示将日志存入文件。'TABLE'表示将日志存入数据库mysql.slow_log表中。也可以同时指定两种存储方式。

设置慢查询相关参数

set global slow_query_log_file=/sql_log/slow_log.log

set global log_queries_not_using_indexes=on

set global long_query_time=0.001

set global slow_query_log=on

慢查询日志的部分内容如下:

【MySQL】慢查询日志_第1张图片

Time:执行查询的时间。

User:查询的用户和IP。

Id:进程ID。

Query_time:查询所执行的时间,查询实际上在MySQL上所执行的时间。

Lock_time:查询对这个记录锁定的时间

Rows_sent:查询的行数

Rows_examined:查询这个记录所读取的行数  没有正确使用索引


永久配置:

上面的方式是临时设置,如果我们重启MySQL的话将会失效。可以通过对my.cnf的 配置实现进行慢查询永久设置

【MySQL】慢查询日志_第2张图片

修改完成后,重启MySQL

可以通过下面的命令查看是否开启慢查询日志

SHOW VARIABLES LIKE 'slow_query%';

SHOW VARIABLES LIKE ' long_query_time%';


使用mysqldumpslow分析慢查询日志


当很短时间产生大量日志,重复SQL。如果我们要手工分析日志,查找SQL显然是很不方便的,MySQL提供了日志分析工具mysqldumpslow.

mysqldumpslow的帮助信息如下


【MySQL】慢查询日志_第3张图片
  • -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
  • -t, 是top n的意思,即为返回前面多少条的数据;
  • -g, 后边可以写一个正则匹配模式,大小写不敏感的;

下面来看一个分析的实例:


【MySQL】慢查询日志_第4张图片

Count:查询出现的次数

Time:执行最长的时间

Lock:等待锁的时间

Rows:查询的行数

你可能感兴趣的:(>>数据库<<)