我在AWS上使用innoDB。我在日志中不断收到大量以下消息:
等待表级锁定
我认为innoDB只做了行级锁。我的代码中没有任何锁定表。有谁知道为什么会这样?
答案 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