慢查询日志其实就是将mysql 的 sql 执行过程中执行时间超过阈值的sql 语句记录下来,方便后续优化。而阈值的大小由 long_query_time 来设置,默认是10秒。
在默认的情况下,mysql 的慢查询日志事关闭的,需要人工手动开启。
mysql> show variables like 'long_query_time'\G;
*************************** 1. row ***************************
Variable_name: long_query_time
Value: 10.000000
1 row in set (0.00 sec)
ERROR:
No query specified
mysql> show variables like '%slow_%';
+---------------------------+--------------------------------------------------------+
| Variable_name | Value |
+---------------------------+--------------------------------------------------------+
| log_slow_admin_statements | ON |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/data/chenguoweideMacBook-Pro-slow.log |
+---------------------------+--------------------------------------------------------+
5 rows in set (0.00 sec)
由上图可知,slow_query_log 是关闭中的,下面我们手动开启下
mysql> set global slow_query_log = on;
Query OK, 0 rows affected (0.00 sec)
而慢查询日志默认是保存在文件中的。
mysql> show variables like 'log_output'\G;
*************************** 1. row ***************************
Variable_name: log_output
Value: FILE
1 row in set (0.00 sec)
下面我们可以将慢查询日志修改为输出到 mysql.slow_log 表中。
mysql> set global log_output='table';
Query OK, 0 rows affected (0.01 sec)
mysql> show variables like 'log_output'\G;
*************************** 1. row ***************************
Variable_name: log_output
Value: TABLE
1 row in set (0.00 sec)
我们执行一条慢查询语句看看
mysql> select sleep(30)\G;
*************************** 1. row ***************************
sleep(30): 0
1 row in set (30.01 sec)
mysql> select *from slow_log\G;
*************************** 1. row ***************************
start_time: 2019-10-21 21:23:48.651561
user_host: root[root] @ localhost []
query_time: 00:00:20.005284
lock_time: 00:00:00.000000
rows_sent: 1
rows_examined: 0
db: mysql
last_insert_id: 0
insert_id: 0
server_id: 0
sql_text: select sleep(20)
thread_id: 4
1 row in set (0.00 sec)
ERROR:
No query specified
可以看到这条慢查询日志保存到了 mysql.slow_log 表中。我们可以根据这些信息来优化sql 语句。