美文网首页
怎么开启MySQL慢日志查询?

怎么开启MySQL慢日志查询?

作者: pupuk | 来源:发表于2018-01-30 16:00 被阅读0次

目前在生产环境的MySQL的主流版本有5.5, 5.6, 5.7三个版本,其中阿里云,腾讯云等主要使用的是5.6的版本(双机高可用), 5.7的版本还在测试跟进中,还未在云上大规模的使用。

这些主流的版本都已经原生支持「慢日志」功能,只需要开启并使用慢日志分析工具,即可找出慢查询语句。相应的云平台也提供了慢日志的管理界面,不过也是在原生Mysql的慢日志功能的包装和增强。

在这之前,我们先看看关于慢查询几个重要的参数:

开启慢日志功能

有2种方式,一是修改mysql的配置文件,二是通过set global语句来实现。

1、修改配置文件,Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下。linux 的配置文件为my.cnf ,一般在 /etc 目录下。

在linux下,vim /etc/my.cnf,在[mysqld]内容项下增加

slow_query_log = ON

long_query_time = 2

我这里设置慢查询时间long_query_time 设置的是2s,认为超过2秒即为慢查询

没有配置日志文件路径和名称,就使用默认的。

重启msyqld服务就可以生效,登入msyql,查看生效情况

SHOW VARIABLES WHERE Variable_name IN('slow_query_log','long_query_time','slow_query_log_file','log-query-not-using-indexes');

可以看到重启后,日志生效。

2、二是通过set global语句来实现,可以在mysql -uroot -p登录后,输入:

SET GLOBAL slow_query_log = 'ON';

就可以立即开始慢日志记录,如果想指定时间和文件位置,可以追加配置:

SET GLOBAL long_query_time = X;

X默认是10s,也就是说超过10s的查询会被记入慢日志。

SET GLOBAL slow_query_log_file = '/path/filename';

日志路径默认是:/var/lib/mysql/hostname-slow.log 文件名中默认包含了当前服务器的hostname,我们可以自定义路径和文件名

可以立即生效,但是msyqld重启以后会失效,因为msyql重启的时候,是按照配置文件来加载配置的,set global语句,只对当前所有会话生效,并未修改配置文件。

慢日志除了记录到文件,还可以记录到数据库表中。只要将mysql全局变量log_output设置为 TABLE即可。MySQL会将日志分别记录到表mysql.gengera_log和mysql.slow_log二张表中。但是,我们推荐将日志记录 在日记文件中,记录到文件可以支持微秒,记录到到数据库表中并不支持。

验证:

在测试的时候,即便有几十万的记录,一条语句很可能零点几秒就执行完了。好在Mysql提供了一个SLEEP函数,可以延迟返回查询结果,比如:

现在去查看日志

可以看到刚才的慢查询记录。

当然随着时间积累,慢日志文件会原来越大,使用cat,grep等命令分析会很困难。Mysql自带mysqldumpslow的可以用做分析,当然还有一个第三方开源的工具,比如mk-query-digest,mysqlsla,myprofi

下面是网上总结的几个工具

mysqldumpslow支持不支持perlmysql官方自带

mysqlsla支持支持perl功能强大,数据报表齐全,定制化能力强.

mysql-explain-slow-log支持不支持perl无

mysql-log-filter支持部分支持python or php不失功能的前提下,保持输出简洁

myprofi支持不支持php非常精简

可能值得我们注意的地方有:

1、初始化锁的时间不算在执行时间内。Mysqld服务写慢日志,是在sql语句执行完,并且所有的锁释放之后才进行的,所以日志顺序和执行顺序有所不同。

2、如果是主从架构(Master,Slave),默认从库不会记录相同的慢日志。如果要修改,可以用log_slow_slave_statements来设置

找出慢日志,可以有效的帮我们我们优化MySQL语句,当然不是简单的加个索引的事情,可能涉及一些不合理的设计,比如该应用层的操作,让sql来做了;该做中间统计表的没有做,每次都是大表实时汇总;该用redis缓存的没有用上;数据库字段类型设计不合理,等等,需要细处着手,全盘考虑。

具体参数可参考MySQL官方链接:

https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

相关文章

  • MySQL 慢查询分析实践

    mysql默认未开启慢查询记录功能;默认慢查询时间为10秒。 一、mysql开启慢查询日志记录 二、利用mysql...

  • 开启MySQL慢查询日志

    查询慢日志开关是否开启 打开慢查询日志开关 再次查询,发现开关打开了 查询mysql安装路径 慢查询日志默认是放在...

  • mysql之数据库优化入门

    开启慢查询日志: 进入mysql,输入以下语句 查看是否开启了慢查询日志: show variables like...

  • Mysql 性能优化

    环境 查看是否开启慢查询日记 查看 mysql 日记信息 开启慢查询日志 设置没有索引的记录到慢查询日志 设置慢查...

  • MySQL性能优化

    MySQL慢查询日志的开启方式 查询是否开启了慢查询日志 设置慢查询日志文件位置 设置是否需要把没有使用到索引的s...

  • mysql 开启慢查询及其用mysqldumpslow做日志分析

    mysql 开启慢查询 mysql慢查询日志是mysql提供的一种日志记录,它是用来记录在mysql中相应时间超过...

  • Mysql-日志-慢查询日志

    本篇文章主要记述Mysql慢查询的学习过程,内容目录如下:慢查询日志是什么?慢查询日志开启和配置慢查询日志相关操作...

  • mysql慢查询日志

    mysql慢查询日志 1.慢查询日志 2.查看配置 3.临时开启慢查询日志 4.通过sql语句检查 5.关闭慢查询...

  • mysql慢查询

    mysql> set global slow-query-log=on # 开启慢查询日志 mysql> set ...

  • mysql查询优化 - 慢查询

    mysql查询速度优化思路 开启慢查询日志 查看导致阻塞的sql语句 重现场景, 单独测试 mysql 慢查询分析...

网友评论

      本文标题:怎么开启MySQL慢日志查询?

      本文链接:https://www.haomeiwen.com/subject/nryczxtx.html