sending data状态表示两种情况,一种是mysql已经查询了数据,正在发给客户端;另一种情况是,mysql已经知道某些数据需要去什么地方读取,正在从数据文件中读取;
说明:最近帮忙定位一个mysql查询很慢的问题,定位过程综合各种方法、理论、工具排查问题。
【问题现象】从mysql查询数据的时候,查询的记录数才几条,但查询的速度非常慢,大概要1分钟左右,平时查询30毫秒。
【处理过程】方法一:查看当前运行的SQL(SHOW PROCESSLIST )
发现很长一段时间,查询都处在 “Sending data”状态,这里的关键是“Sending data”UPDATE数据。
方法二: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相关进程,更改业务需求。