前言:
在我们项目运行过程中,会遇到因为SQL执行缓慢导致页面响应时间过长,甚至长时间未响应导致服务器运行异常的现象,因此我们需要定位查询执行缓慢的SQL语句,对其进行优化提高我们项目的运行效率。
1.查看是否开启慢查询日志
show variables like 'slow_query_log';
查询结果如下图,Value为OFF,则没有开启慢查询日志
使用命令开启慢查询日志
set global slow_query_log=on;
2.设置没有开启索引的SQL语句记录到慢查询日志
set global log_queries_not_using_indexes=on;
3.设置超过多长时间的SQL记录到慢查询日志
首先查询默认超时多久
show variables like 'long_query_time';
本人的MySql是默认超过10秒才会记录,将其改为0.5s
set long_query_time=0.5;
4.查看慢查询日志存储位置
show variables like 'slow_query_log_file';
查询到日志位置以后就可以根据日志记录对相应SQL进行调优,一般这个位置是不会更改的,如果需要自定义,则使用以下命令
set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log';
5.日志内容解析
##SQL执行时间
# Time: 2018-12-28T09:01:11.975195Z
##访问IP
# User@Host: root[root] @ localhost [::1] Id: 21
##SQL执行信息
# Query_time: 0.000788 Lock_time: 0.000147 Rows_sent: 15 Rows_examined: 287
##SQL执行时间
SET timestamp=1545987671;
##SQL语句
SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID;