为什么innoDB会锁定表

时间:2014-05-21 01:55:35

标签: mysql innodb table-locking database-engine

我在AWS上使用innoDB。我在日志中不断收到大量以下消息:

等待表级锁定

我认为innoDB只做了行级锁。我的代码中没有任何锁定表。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

当InnoDB表锁定出现时,有某些原因:

1)如果innodb_table_locks = 1(默认值)和autocommit = 0,InnoDB知道表锁,InnoDB上面的MySQL层知道行级锁。

您应该设置innodb_table_locks=0并重新启动MySQL服务器。

2)在初始化表上的先前指定的AUTO_INCREMENT列时,InnoDB在与AUTO_INCREMENT列关联的索引的末尾设置独占锁。在访问自动增量计数器时,InnoDB使用特定的AUTO-INC表锁定模式,其中锁定仅持续到当前SQL语句的末尾,而不是整个事务的结束。在保持AUTO-INC表锁时,其他客户端无法插入表中。

您也可以参考此博文:http://www.mysqlperformanceblog.com/2012/07/31/innodb-table-locks/

答案 1 :(得分:0)

在某些情况下,innoDB会执行表锁(如AUTO-INC)在这方面看到这篇文章,看看是否适用于你的案例:InnoDB table locks

同时检查是否在MySQL配置中设置或设置innodb_table_locks=0。请参阅此处的文档:InnoDB Startup Options and System Variables