背景
近日发现公司的某个网站经常出现无响应状态,经过一系列排查后最终确认是mysql的某些查询导致了锁表。这其中mysql的慢查询log记录让我们定位到了根本原因.那么什么是慢查询呢?它又有什么作用呢?废话不多说,在接下来的内容里会解答这两个问题。
一、简介
慢查询日志是mysql服务器将影响数据库性能的相关SQL语句记录下来生成的日志文件。开启慢查询日志,可以让MySQL记录下执行超过指定时间(long_query_time)的语句,帮我们找到执行慢的sql语句。通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
二、参数
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
三、状态查询
3.1 查询开启状态
show variables like 'slow_query%';
3.2 查询long_time_query
show variables like 'long_query_time';
四、设置步骤
4.1 全局变量设置
设置完成后不需要重启mysql即可生效,比较灵活,但重启mysql的话需要重新设置。
- 将 slow_query_log 全局变量设置为“ON”状态
set slow_query_log='ON';
- 查询超过1秒就记录
set long_query_time=1;
- 设置慢查询日志存放的位置
set slow_query_log_file='/home/mysql/var/slow.log';
4.2 配置文件设置
进入mysql的配置文件my.cnf(vi /etc/my.cnf),在mysqld下方添加下面语句
[mysqld]
slow_query_log = ON
slow_query_log_file = /home/mysql/var/slow.log
long_query_time = 3
这种方法重启mysql后才能生效。
五、测试
1.在上面的设置完成以后,我们查看下localhost-slow.log是否生成.
vi /home/mysql/var/localhost-slow.log
模拟一条慢sql查询语句:
select sleep(5);
2.查看慢查询日志是否记录。
vi /home/mysql/var/localhost-slow.log
图中已经出现了log记录,配置成功.
六、小结
mysql里的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等.其中通用查询日志和慢查询日志是比较常用。这里记录了慢查询的大体使用方法。下面记录一下相关常用的一些设置或查询语句。
- 当前数据库中与版本号相关的内容
showvariables like ‘%version%’;
- 通用日志查询是否开启
showvariables like ‘%general%’;
- 查看当前慢查询日志输出的格式
showvariables like ‘%log_output%;