博客
关于我
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:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>