我有一个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)
可能是什么造成了这种情况,我怎么能杀死这个过程,以便继续我的工作?
如果表 email_data_test 是 MyISAM 并且它被锁定,那么 INSERT 就会被阻止。
如果表 email_data_test 是 InnoDB,则大量 MVCC 数据正在写入 ib_logfiles,这可能尚未发生。
在这两种情况下,您都让 LIMIT 子句滚动 4,480,000 行,只是为了达到 INSERT 实际需要的 10,000 行。
终止查询只会导致 InnoDB 表 email_data_inno_stage 执行回滚。
| 归档时间: |
|
| 查看次数: |
16540 次 |
| 最近记录: |