KILL [CONNECTION | QUERY] processlist_id
每个与mysqld的连接都在一个单独的线程中运行。您可以使用该语句
终止线程。KILL
processlist_id
线程进程列表标识符可以从
表的
ID列
、输出的
列和性能模式表的列中确定。当前线程的值由
函数返回。
INFORMATION_SCHEMA
PROCESSLISTIdSHOW
PROCESSLISTPROCESSLIST_IDthreadsCONNECTION_ID()
KILL允许可选
CONNECTION或QUERY
修饰符:
KILL CONNECTION与没有修饰符相同KILL:它终止与给定关联的连接processlist_id,在终止连接正在执行的任何语句之后。KILL QUERY终止连接当前正在执行的语句,但保持连接本身不变。
查看哪些线程可以被杀死的能力取决于PROCESS特权:
杀死线程和语句的能力取决于
SUPER权限:
您还可以使用mysqladmin processlist 和mysqladmin kill命令来检查和终止线程。
您不能使用KILL嵌入式 MySQL 服务器库,因为嵌入式服务器仅在主机应用程序的线程内运行。它不会创建自己的任何连接线程。
当您使用 时KILL,会为线程设置特定于线程的终止标志。在大多数情况下,线程可能需要一些时间才能结束,因为 kill 标志仅在特定时间间隔检查:
在
SELECTforORDER BY和GROUP BY循环操作期间,在读取一个行块后检查标志。如果设置了 kill 标志,语句将中止。ALTER TABLE制作表副本的操作会定期检查从原始表中读取的每几行复制的 kill 标志。如果设置了 kill 标志,语句将中止并删除临时表。该
KILL语句不等待确认就返回,但 kill 标志检查会在相当短的时间内中止操作。中止操作以执行任何必要的清理也需要一些时间。在
UPDATEorDELETE操作期间,kill 标志在每个块读取之后以及每个更新或删除的行之后被检查。如果设置了 kill 标志,语句将中止。如果您不使用事务,则不会回滚更改。GET_LOCK()中止并返回NULL。如果线程在表锁处理程序中(状态:)
Locked,表锁将很快中止。如果线程正在等待写入调用中的可用磁盘空间,写入将中止并显示“磁盘已满” 错误消息。
终止表上的REPAIR TABLEor
OPTIMIZE TABLE操作
MyISAM会导致表损坏且无法使用。在您再次优化或修复它(不中断)之前,对此类表的任何读取或写入都会失败。