开启慢SQL的配置参数

slow_query_log: 该参数表示是否开启慢SQL查询日志。在mysql中,我们可以通过以下命令来查看和修改该变量的状态

show variables like '%slow_query_log%'  #查询该变量在MySQL中当前的状态。
set GLOBAL slow_query_log = ON/OFF     #开启慢查询监控ON,关闭慢查询监控OFF

开启general_log执行日志

show variables like "general_log%";#查询该变量在MySQL中当前的状态。
set GLOBAL general_log = 'ON';#开启执行日志监控ON,关闭执行日志监控OFF

long_query_time设置该参数,可以规定执行多长时间的SQL为慢SQL。

show variables like '%long_query_time%'  #查询该变量在MySQL中的状态
set long_query_time = 6    #设置SQL执行时间超过6S,就当作慢SQL输出

slow_query_log_file设置该参数,可以将慢SQL输出到指定的规定的日志文件。

show variables like '%slow_query_log_file%'   #查询该变量在MySQL中的状态
set slow_query_log_file = /home/admin/mysql/log/slow_sql.log  #指定慢SQL输出的日志文件

log_queries_not_using_indexes该参数设置为ON,可以输出所有未使用索引的SQL语句。

show variables like 'log_queries_not_using_indexes' #查询该变量在MySQL中的状态
set global log_queries_not_using_indexes = ON/OFF #设置该变量值打开或关闭

log_output可以通过该参数,指定慢SQL输出到表或文件中。如果输出到表中在mysql.slow_log表中可以查看。

show variables like 'log_output'  #查询该变量在MySQL中的状态
set GLOBAL log_output = table/FILE  #设置慢SQL输出到table或file
set GLOBAL log_output = 'table,FILE' #设置慢SQL同时输出到table和file

从mysql的table中查看mysql日志

这要在上面中设置输出日志到table中,比如
set GLOBAL log_output = table/FILE #设置慢SQL输出到table或file同时输出到file和table中

select * from mysql.slow_log

这个是在mysql的库
在这里插入图片描述

记录分析(mysqldumpslow)

mysqldumpslow -s t -t 10 -g 'log' mysql_slow.log

MySQL自带的慢SQL分析工具

-s : 按照哪种规则排序
-t: 显示前几个记录
-g : 有点像grep, 后跟正则

  • c: 访问计数
  • l: 锁定时间
  • r: 返回记录
  • t: 查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间

demo如下
最好在mysql_slow.log前加全路径,这里的mysql-slow.log是之前设置的日志输出文件的路径下的文件名,默认就是mysql-slow.log

mysqldumpslow -s t -t 10 /var/lib/mysql/mysql-slow.log
在这里插入图片描述

得到返回记录集最多的10条SQL

mysqldumpslow -s r -t 10 /var/lib/mysql/mysql-slow.log

得到按照查询时间排序,并且带有left join的10条SQL

mysqldumpslow -s t -t 10 -g “left join/var/lib/mysql/mysql-slow.log

查看正在运行的sql

select * from information_schema.processlist

demo
找出所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便后面查杀 (此处 5分钟 可根据自己的需要调整SQL标红处)

select concat('kill ', id, ';') from information_schema.processlist where Command != 'Sleep' and Time > 300 order by Time desc;

查询线程及相关信息

除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。

show full processlist

ID 为此线程ID,Time为线程运行时间,Info为此线程SQL
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐