1、查询参数

  1. #慢日志开关, 0:关闭 1:开启 默认:关闭
  2. mysql> select @@slow_query_log;
  3. #慢日志文件, 默认位置: 数据目录/centos7-slow.log
  4. mysql> select @@slow_query_log_file;
  5. #慢查询时间,默认: 10秒
  6. #生产中可以先设置2秒, 先解决2秒的慢SQL语句, 在设置1秒, 循序渐进
  7. mysql> select @@long_query_time;
  8. #记录没有使用索引查询语句, 0:关闭 1:开启 默认:关闭
  9. mysql> select @@log_queries_not_using_indexes;

2、配置方式

2.1、在线修改

# 开启慢查询日志记录
mysql> set global slow_query_log=1;

# 记录0.1秒的慢sql语句
mysql> set global long_query_time=0.1;

# 记录没有使用索引查询语句
mysql> set global log_queries_not_using_indexes=1;

2.2、配置文件

vim /etc/my.cnf
[mysqld]
slow_query_log=1 
slow_query_log_file=/data/3307/slow/slow.log
long_query_time=0.1
log_queries_not_using_indexes

3、慢日志查看

慢日志属于文本格式, vim cat less 等直接可以查看

vim /data/3307/slow/slow.log
# Time: 2021-01-07T13:27:08.651556Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 2.304674  Lock_time: 0.024001 Rows_sent: 1000000  Rows_examined: 1000000
SET timestamp=1610026028;
select * from test.t100w;

# Time 和 SET timestamp 表示 慢SQL发生的日期时间
# Query_time: 2.304674 表示执行秒数

# 慢SQL日志痛点:
1.根据执行时间依次记录
2.会重复记录

4、慢日志分析

mysqldumpslow -s c -t 5 slow.log
-s的常用子参数有:
c: 相同查询以查询条数和从大到小排序。
t: 以查询总时间的方式从大到小排序。
l: 以查询锁的总时间的方式从大到小排序。
at: 以查询平均时间的方式从大到小排序。
al: 以查询锁平均时间的方式从大到小排序

# 优化顺序,有100条慢SQL,80条重复的,执行时间2s,2条未重复的,5s
# 先优化80条重复的,执行时间2s的慢SQL语句

5、扩展

分析工具: pt-query-digest
优点: 比 mysqldumpslow 显示更加详细