Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.7.8.4 杀死语句

KILL [CONNECTION | QUERY] processlist_id

每个连接到mysqld的线程都运行在单独的线程中。您可以使用KILL processlist_id语句杀死一个线程。

线程进程列表标识符可以从INFORMATION_ SCHEMA中的PROCESSLIST表的ID列、SHOW PROCESSLIST输出的Id列和性能chema中的threads表的PROCESSLIST_ID列中确定。当前线程的值由CONNECTION_ ID()函数返回。

KILL允许可选的CONNECTIONQUERY修饰符:

  • KILL CONNECTION 等同于没有修饰符的KILL:它终止与给定的processlist_ id关联的连接,终止连接正在执行的语句。

  • KILL QUERY 终止连接当前正在执行的语句,但保留连接本身。

查看可杀死线程的能力取决于PROCESS特权:

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

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

杀死线程和语句的能力取决于CONNECTION_ADMIN特权和弃用的SUPER特权:

您还可以使用mysqladmin processlistmysqladmin kill命令来检查和杀死线程。

当您使用KILL时,会为该线程设置一个线程特定的杀死标记。在大多数情况下,这可能需要一些时间,因为只有在特定间隔检查kill标记:

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

  • ALTER TABLE 操作在从原始表中读取每少量行时,周期性地检查kill标志。如果kill标志已设置,语句将被中止,并删除临时表。

    KILL 语句立即返回,而kill标志检查将在较短时间内中止操作。中止操作以执行必要的清理也需要一些时间。

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

  • GET_LOCK() 将中止并返回NULL

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

  • 如果线程等待写入调用中的免费磁盘空间,写入将以““disk full””错误消息被中止。

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

Warning

REPAIR TABLEOPTIMIZE TABLE操作在MyISAM表上执行后,会导致该表损坏且不可用。对这样的表进行读取或写入操作将失败,直到您再次优化或修复该表(无中断)。