我的服务器正在运行 mysql,当我在 mysql 命令提示符下执行“show processlist”时,我看到来自某个特定用户的大量 INSERT 和 UPDATE 查询,这些查询处于“锁定”状态,并且耗时非常长——有些甚至长达 700 秒。有人能帮我理解这里发生了什么吗?
答案1
有东西告诉我您正在使用一堆 MyISAM 表。
请记住,MyISAM 表在执行任何 DML(INSERT、UPDATE、DELETE)时都会执行表级锁定。此类语句会阻止其他类似语句。甚至 SELECT 也会阻止 DML。
如果将所有 MyISAM 表转换为 InnoDB,则这个问题就会消失,因为 InnoDB 执行行级锁定,从而允许添加、删除、更新和选择行而不会发生锁争用。
警告:如果任何 MyISAM 表具有 FULLTEXT 索引,则此类表无法转换为 InnoDB。对于所有其他表,请尽快将其转换为 InnoDB !!!