Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

15.7.8.4 KILL 语句

KILL [CONNECTION | QUERY] processlist_id

每个连接到 mysqld 都运行在一个单独的线程中。你可以使用 KILL processlist_id 语句来终止一个线程。

线程进程列表标识符可以从 ID 列的 INFORMATION_SCHEMA PROCESSLIST 表、Id 列的 SHOW PROCESSLIST 输出和 Performance Schema threads 表的 PROCESSLIST_ID 列中确定。当前线程的值由 CONNECTION_ID() 函数返回。

KILL 允许可选的 CONNECTIONQUERY 修饰符:

  • KILL CONNECTIONKILL 无修饰符相同:它终止与给定 processlist_id 相关的连接,终止连接当前执行的任何语句。

  • KILL QUERY 终止连接当前执行的语句,但保持连接本身不变。

查看哪些线程可以被终止取决于 PROCESS 权限:

  • 没有 PROCESS 权限,你只能看到自己的线程。

  • PROCESS 权限,你可以看到所有线程。

终止线程和语句的能力取决于 CONNECTION_ADMIN 权限和已弃用的 SUPER 权限:

你也可以使用 mysqladmin processlistmysqladmin kill 命令来检查和终止线程。

当你使用 KILL 时,线程特定的终止标志将被设置。在大多数情况下,线程可能需要一些时间来死亡,因为终止标志仅在特定间隔检查:

  • SELECT 操作期间,对于 ORDER BYGROUP BY 循环,标志将在读取一块行后检查。如果终止标志被设置,语句将被中止。

  • ALTER TABLE 操作将表副本检查终止标志,每读取原始表的几行后。如果终止标志被设置,语句将被中止,临时表将被删除。

    KILL 语句将返回而不等待确认,但是kill 标志检查将在合理的时间内中止操作。中止操作以执行必要的清洁工作也需要一些时间。

  • UPDATEDELETE 操作期间,kill 标志将在每个块读取和每个更新或删除行后检查。如果kill 标志被设置,语句将被中止。如果您不使用事务,变化将不会回滚。

  • GET_LOCK() 将中止并返回 NULL

  • 如果线程在表锁处理程序中(状态:Locked),表锁将快速中止。

  • 如果线程在写调用中等待免费磁盘空间,写操作将以“磁盘满”错误信息中止。

  • EXPLAIN ANALYZE 将中止并打印输出的第一行。

Warning

杀死 REPAIR TABLEOPTIMIZE TABLE 操作在 MyISAM 表上将导致表变得损坏且不可用。对这样的表的任何读取或写入操作都将失败,直到您再次优化或修复它(不中断)。