慢 SQL 开启前查询

看一下当前mysql数据库是否开启了慢查询和存放位置

mysql >  show variables like 'slow_query%';

查询 慢 SQL 的阈值 , 默认是 秒数

mysql> show variables like 'long_query%';

其他查询

show variables like 'slow_query_log_file';  慢日志输出方式FILE/TABLE
​
show variables like '%query_cache%';        查询缓存
​
show variables like '%read_buffer_size%';   读入缓冲区大小
​
show variables like '%max_connections%';    连接数
​
show variables like '%tmp_table_size%';     临时表大小

开启慢 SQL

#临时开启
set global slow_query_log_file='/home/dpan/mysql/slow.log';
set global long_query_time=8;
​
set global log_output='FILE,TABLE';  //默认是FILE。如果也有TABLE,则同时输出到mysql库的slow_log表中。
set global slow_query_log='ON';
#永久开启 修改配置文件my.cnf,在[mysqld]下的下方加入,保存后,重启服务
[mysqld]
slow_query_log = ON
# linux    
slow_query_log_file = /home/dpan/mysql/slow.log    
long_query_time = 8

慢日志分析

使用 mysqldumpslow 命令
​
mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等.
​
mysqldumpslow语法说明:
-s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。
al: average lock time 平均锁定时间
ar: average rows sent 平均返回行数
at: average query time 平均查询时间
c: count 总执行次数
l: lock time 总锁定时间
r: rows sent 总返回行数
t: query time 总查询时间
-t ,show the top n queries,显示前多少名的记录
-a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。
-g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。
-l ,总时间中包含锁定时间
​
#参考: <https://blog.csdn.net/zhougongping/article/details/122377129>
​
#耗时最长的10个SQL
mysqldumpslow -t 10 slow.log

#执行次数最多的10个sql语句
mysqldumpslow -s c -t 10 slow.log

#获取条数最多的10个sql
mysqldumpslow -s r -t 10 slow.log