mysql开启慢sql,以及查询分析慢sql,查看正在运行的sql
开启慢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
更多推荐
所有评论(0)