简介
MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能。
我们可以根据日志中的信息来判断我们的sql语句执行情况。如果要学会然后优化sql优化这个一定要会呀
开启慢查日志
- mysql5.7版本默认开启了慢查日志,但是其日志文件名可能不是我们想要的,我们查询如下:
mysql> show variables like '%quer%';
+----------------------------------------+--------------------------+
| Variable_name | Value |
+----------------------------------------+--------------------------+
| binlog_rows_query_log_events | OFF |
| ft_query_expansion_limit | 20 |
| have_query_cache | YES |
| log_queries_not_using_indexes | OFF |
| log_throttle_queries_not_using_indexes | 0 |
| long_query_time | 10.000000 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
| slow_query_log | ON |
| slow_query_log_file | ICOS-20180710CX-slow.log |
+----------------------------------------+--------------------------+
15 rows in set, 1 warning (0.00 sec)
可以看到这个默认的慢查询日志文件名是:ICOS-20180710CX-slow.log
。而且这个slow_query_log
是开启状态的。
- 在Mysql配置文件里(windows下My.ini,linux下my.cnf)里的mysqld的下面添加(如果存在就修改成对应的配置)
# 修改成下面这段配置
log-output=FILE
general-log=0
general_log_file="DESKTOP-4RN63N2.log"
slow-query-log=1
slow_query_log_file="C:/ProgramData/MySQL/MySQL Server 5.5/logDESKTOP-4RN63N2-slow.log"
long_query_time=1 -- 这是大于多少秒的sql语句会被记录下来
ps:my.ini 文件windows 通常在 C:\ProgramData\MySQL\MySQL Server 5.5
目录下
- 最后重启mysql 服务,查看慢查询日志即可
分析慢查日志
set long_query_time=0; -- 所有执行的sql都会被记录到慢查日志中
-- 执行段sql语句
select * from t where a between 10000 and 20000; /*Q1*/
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.020050 Lock_time: 0.001001 Rows_sent: 10001 Rows_examined: 10001
SET timestamp=1574349547;
select * from t where a between 10000 and 20000;