博客
关于我
mysql开启慢sql,以及查询分析慢sql,查看正在运行的sql
阅读量:404 次
发布时间:2019-03-05

本文共 2151 字,大约阅读时间需要 7 分钟。

开启慢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或fileset 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

在这里插入图片描述

转载地址:http://kiizz.baihongyu.com/

你可能感兴趣的文章
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>