我有一个 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 |
可能是什么导致了这种情况,我该如何终止这个进程以便继续我的工作?
如果表 email_data_test 是 MyISAM 并且它被锁定,那么 INSERT 就会被阻止。
如果表 email_data_test 是 InnoDB,则大量 MVCC 数据正在写入 ib_logfiles,这可能尚未发生。
在这两种情况下,您都让 LIMIT 子句滚动 4,480,000 行,只是为了达到 INSERT 实际需要的 10,000 行。
终止查询只会导致 InnoDB 表 email_data_inno_stage 执行回滚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)