mysql sending data的状态导致数据库很慢及无法DDL 操作

sending data状态表示两种情况,一种是mysql已经查询了数据,正在发给客户端;另一种情况是,mysql已经知道某些数据需要去什么地方读取,正在从数据文件中读取;

说明:最近帮忙定位一个mysql查询很慢的问题,定位过程综合各种方法、理论、工具排查问题。

【问题现象】从mysql查询数据的时候,查询的记录数才几条,但查询的速度非常慢,大概要1分钟左右,平时查询30毫秒。

【处理过程】方法一:查看当前运行的SQL(SHOW PROCESSLIST )

mysql sending data的状态导致数据库很慢及无法DDL 操作_第1张图片

发现很长一段时间,查询都处在 “Sending data”状态,这里的关键是Sending dataUPDATE数据

方法二:show profile

注:由于使用阿里云实例有很多不方便的地方。

使用了show profile命令来查看详细的时间分布

首先打开配置:set profiling=on;
执行完查询后,使用show profiles查看query id;
使用show profile for query query_id查看详细信息;

方法三:information_schema.processlist

SELECT concat('KILL ',id,';')FROM information_schema.processlist WHERE time>=500;


【问题原因】

注:MYSQL版本是5.6.16

由于开发人员使用MySQL Event Scheduler事件,

MySql event时间触发器实现满足条件自动更新符合的状态。由于当天晚上数据没有更新完(数据库大约2万条左右,更新时间为53049秒)


【解决方法】KILL相关进程,更改业务需求。


你可能感兴趣的:(mysql)