MySQL

MySQL慢查询

2017-07-22  本文已影响35人  雁宇

定义

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。过多的慢查询会导致数据库崩溃。(来自百度百科 - 慢查询

在MySQL5.7中启用慢查询

  1. 登录本地mysql:
mysql -u root -p123456
  1. 查看系统变量的状态:
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

  1. 启用慢查询日志记录,并修改默认的慢查询时间:
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

  1. 重新打开MySQL窗口,查看系统变量的状态:

| long_query_time | 2.000000
| slow_query_log | ON
| slow_query_log_file | /usr/local/mysql/data/duanyanlongdeMacBook-Pro-slow.log

  1. 模拟执行慢查询:
SELECT SLEEP(5);
  1. 查看慢查询的日志记录:
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);

上一篇下一篇

猜你喜欢

热点阅读