从脚本中,我将这样的查询发送了数千次到本地数据库:
update some_table set some_column = some_value 我忘了添加where部分,因此同一列为表中的所有行设置了相同的值,并且完成了数千次,并且对该列建立了索引,因此相应的索引可能更新了太多次。
我注意到出了点问题,因为花了太长时间,所以我杀死了脚本。从那以后,我什至重新启动了计算机,但表中有些东西卡住了,因为简单的查询需要很长时间才能运行,并且当我尝试删除相关索引时,它失败并显示以下消息:
Lock wait timeout exceeded; try restarting transaction 这是一个innodb表,因此卡住的事务可能是隐式的。如何修复此表并从中删除卡住的事务?
我遇到了类似的问题,并通过检查正在运行的线程解决了该问题。要查看正在运行的线程,请在mysql命令行界面中使用以下命令:
SHOW PROCESSLIST; 如果您无权访问mysql命令行界面,也可以从phpMyAdmin发送它。 这将显示具有相应ID和执行时间的线程列表,因此您可以杀死执行时间过多的线程。在phpMyAdmin中,您将有一个用于通过使用KILL停止线程的按钮,如果您使用的是命令行界面,则只需使用KILL命令后跟线程ID,如以下示例所示:
KILL 115; 这将终止相应线程的连接。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。