慢 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