MySQL查询在被杀后不会消失

Wig*_*ige 7 mysql

我有一个MySQL查询,将数据从一个表复制到另一个表进行处理.出于某种原因,这个查询通常需要几秒钟的时间才能锁定并运行几个小时.当我今天早上登录时,我试图终止查询,但它仍然列在进程列表中.

| Id      | User     | Host      | db   | Command | Time  | State        | Info                                                                                 |
+---------+----------+-----------+------+---------+-------+--------------+--------------------------------------------------------------------------------------+
| 1061763 | tb_admin | localhost | dw   | Killed  | 45299 | Sending data | INSERT INTO email_data_inno_stage SELECT * FROM email_data_test LIMIT 4480000, 10000 |
| 1062614 | tb_admin | localhost | dw   | Killed  |   863 | Sending data | INSERT INTO email_data_inno_stage SELECT * FROM email_data_test LIMIT 4480000, 10000 |
Run Code Online (Sandbox Code Playgroud)

可能是什么造成了这种情况,我怎么能杀死这个过程,以便继续我的工作?

Rol*_*DBA 3

如果表 email_data_test 是 MyISAM 并且它被锁定,那么 INSERT 就会被阻止。

如果表 email_data_test 是 InnoDB,则大量 MVCC 数据正在写入 ib_logfiles,这可能尚未发生。

在这两种情况下,您都让 LIMIT 子句滚动 4,480,000 行,只是为了达到 INSERT 实际需要的 10,000 行。

终止查询只会导致 InnoDB 表 email_data_inno_stage 执行回滚。