【问题标题】:Why would innoDB lock tables为什么innoDB会锁表
【发布时间】:2014-05-21 01:55:35
【问题描述】:

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

等待表级锁

我以为 innoDB 只做行级锁。我的代码中没有任何锁表。有谁知道为什么会发生这种情况?

【问题讨论】:

标签: mysql innodb table-locking database-engine


【解决方案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/

【讨论】:

    【解决方案2】:

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

    还要检查是否在 MySQL 配置中设置或设置 innodb_table_locks=0。请参阅此处以获取文档:InnoDB Startup Options and System Variables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多