定义
分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。过多的慢查询会导致数据库崩溃。(来自百度百科 - 慢查询)
在MySQL5.7中启用慢查询
- 登录本地mysql:
mysql -u root -p123456
- 查看系统变量的状态:
show variables like '%query%';
可以看到几条关键的数据:
| long_query_time | 10.000000
| slow_query_log | OFF
| slow_query_log_file | /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log
- 启用慢查询日志记录,并修改默认的慢查询时间:
set global slow_query_log = ON;
set global long_query_time = 2;
修改后再次查询系统变量的状态,发现long_query_time
的值并没有改变,这是因为直接修改global 的long_query_time 之后在当前的的窗口中是没有效果的,在新打开的窗口中才会有效果。如果想让本窗口也有效果 的话,不用加 global关键字。(参照:set global long_query_time对当前窗口无效80@365)
- 重新打开MySQL窗口,查看系统变量的状态:
| long_query_time | 2.000000
| slow_query_log | ON
| slow_query_log_file | /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log
- 模拟执行慢查询:
SELECT SLEEP(5);
- 查看慢查询的日志记录:
sudo cat /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log
可以看到刚刚被执行的慢查询已经被记录了下来:
/usr/local/mysql/bin/mysqld, Version: 5.7.18 (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument# Time: 2017-07-17T12:49:08.093455Z
# User@Host: root[root] @ localhost [] Id: 5
# Query_time: 5.006725 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1500295748;
SELECT SLEEP(5);