DBAtlas · 数据库运维图谱

1206: The total number of locks exceeds the lock table size(锁的总数超过了锁表大小)

MySQL

含义

InnoDB 已耗尽为其持有的锁分配的内存(buffer pool 中的锁结构)。当单个事务累积了过多的行锁/间隙锁时发生,事务会被回滚。

原因

超大的单个事务:一次性 UPDATE/DELETE 数百万行、没有索引的 WHERE 子句锁住整张表,或 innodb_buffer_pool_size 对于该负载过小。大型批处理作业是典型的触发因素。

解决方法

将大型 DML 拆分为小批次(例如在循环中用 LIMIT 每次删除/更新 10,000 行,每批之后 COMMIT)。为 WHERE 列建立索引以减少被锁定的行数。作为永久方案,增大 innodb_buffer_pool_size(锁结构从中分配)。避免不必要的长事务。

在 DBAtlas 中打开 →

同一数据库的其他条目