在 MySQL 中有两个 kill 命令:
一个是 kill query + 线程 id,表示终止这个线程中正在执 行的语句;
一个是 kill connection + 线程 id,这里 connection 可缺省,表示断开这个线 程的连接,当然如果这个线程有语句正在执行,也是要先停止正在执行的语句的
kill query/connection 命令是有效的。
比如,执行一个查询的过程 中,发现执行时间太久,要放弃继续查询,这时我们就可以用 kill query 命令,终止这条查 询语句。
还有一种情况是,语句处于锁等待的时候,直接使用 kill 命令也是有效的
注意:
kill 并不是马上停止的意思,而是告诉执行线程说,这条语句已经不需要继续执 行了,可以开始“执行停止的逻辑了。
kill耗时过长的原因:
1.超大事务执行期间被 kill。这时候,回滚操作需要对事务执行期间生成的所有新数据版本 做回收操作,耗时很长。
2.大查询回滚。如果查询过程中生成了比较大的临时文件,加上此时文件系统压力大,删 除临时文件可能需要等待 IO 资源,导致耗时较长。
3.DDL 命令执行到最后阶段,如果被 kill,需要删除中间过程的临时文件,也可能受 IO 资 源影响耗时较久。