我有服务器运行MySQL,当我在一个mysql命令提示符下执行'show processlist'时,我看到很多来自一个特定用户的INSERT和UPDATE查询,状态为“locking”,时间非常高 – 有些高到700秒。 有人能帮我理解这里发生了什么吗?
有些东西告诉我你正在使用一堆MyISAM表。
请记住,当执行任何DML(INSERT,UPDATE,DELETE)时,MyISAM表执行表级锁。 这样的陈述阻止其他类似的陈述 即使SELECTs也可以阻止DML。
如果将所有的MyISAM表转换为InnoDB,这个问题应该会消失,因为InnoDB执行行级locking,从而允许添加,删除,更新和select行而不会产生锁争用。
CAVEAT:如果任何MyISAM表都有FULLTEXT索引,那么这些表就不能转换成InnoDB。 对于所有其他表,请尽快将它们转换为InnoDB!