慢查询日志是MySQL数据库提供一种记录所有执行时间超过指定时间的SQL语句,然后我们可以通过日志里的SQL语句进行分析、优化。通俗的点说,就是开启慢查询日志,我们就可以定位到有性能瓶颈的地方,进而进行优化。
首先,先查看一下你的慢查询日志的配置信息:
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'slow_query%';
+---------------------+-------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/var/bogon-slow.log |
+---------------------+-------------------------------------+
2 rows in set (0.08 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql>
slow_query_log 慢查询状态
slow_query_log_file 慢查询日志存放的位置。如果修改注意给权限用来写入
long_query_time 查询超过多少秒才记录日志
配置慢查询日志
修改配置文件
假如你不知道你的配置文件.wamp环境下D:\wamp\bin\mysql\mysql5.6.17\my.ini;Linux下一般在/etc/my.cnf。开启慢查询日志功能,同时设置慢查询日志文件的路径以及时间限制。
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
记得重启MySQL
准备测试SQL
mysql> select sleep(2);
mysql> select * from tbl_repair_step where orderno like '%SM%';
查看日志信息
/usr/local/mysql/bin/mysqld, Version: 5.5.60-log (Source distribution). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
# Time: 190326 1:53:15
# User@Host: root[root] @ localhost []
# Query_time: 2.004999 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use jkdb;
SET timestamp=1553536395;
select sleep(2);
# Time: 190326 2:00:30
# User@Host: root[root] @ localhost []
# Query_time: 0.554035 Lock_time: 0.000114 Rows_sent: 79620 Rows_examined: 85948
SET timestamp=1553536830;
select * from tbl_repair_step where orderno like '%SM%';
Time 执行慢查询语句的服务器时间
User@Host 执行慢查询语句的用户
Query_time 表示慢查询语句执行用了多少时间
SET timestamp 将信息写入日志的时间戳
聂哥友情提醒
开启慢查询日志是MySQL优化及调试的一个重要方法。但是开启慢查询日志会占用一定的系统资源。所以线上项目,调试完还是将其关闭