mysql 未提交事务进程ID(trs_mysql_thread_id) kill 不掉?


---- 一更 ----

1. 问题原因已找到
2. 更改标题.

原因并不是线程ID杀不死, 而是, 它正在使劲回滚. 由于delete的数据量很大, 撤销后, 回滚需要多几倍的时间. 过了一晚上, 第二天, 查看时, 已经没有 未提交的事务 了.


原问题

起因时mysql磁盘爆了, 于是删除大表.
不知道怎搞的, 执行了delete * from 表. 结果崩了...

用的navicat视图工具, navicat界面崩溃, 于是强关.
重启后, 怎么删除都是崩溃.

已做的工作

首先, 根据网上资料, show processlist 查看statewaiting for table metadata lock 的任务, 然后kill掉.
但是, 但是, 之后一旦执行删除, 依然是 waiting for table metadata lock.

clipboard.png

然后, 查询 未提交的事务: select * from information_schema.innodb_trx
但是, 但是, 发现怎么kill都kill不了, 一查, 还是存在...
clipboard.png

阅读 7.2k
1 个回答

大表不能这样删, 因为中断后 Rolling back 也要很多时间的.
要么用 truncate table tablename;
要么加 limit 每次删一小部分, 保证在删的过程中的基本可用性.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题