innodb_autoinc_lock_mode我最近被讨论innodb_autoinc_lock_mode公司的一些同事解决问题我处理。

innodb_autoinc_lock_mode

这个变量定义了锁定模式用于生成自动递增值。允许的值是0,1或2(对于“传统”,“连续”或“交错”锁定模式,分别)。在大多数情况下,这个变量设置为默认为1。

我们建议设置2当BINLOG_FORMAT =行。交错,INSERT语句不用表级锁AUTO-INC并可以同时执行多个语句。设置为0或1会导致一个巨大的在某些工作负载的并发性。

交叉(或2)是最快和最可伸缩的锁定模式,但它是不安全的,如果使用STATEMENT-based复制或恢复场景当SQL语句从二进制日志重播。另一个考虑——反正你不应该依赖——是id可能不是连续的锁定模式2。这意味着你可以做三个插入并期望id 100101年和103年,但是最后的100年,102年和104年。对大多数人来说,这不是一个巨大的交易。

如果你只是做简单的插入,这可能不会帮助你。我做了一个MySQL 5.7在Amazon RDS sysbench测试100个线程,并没有发现差异性能或锁模式1和2之间的吞吐量。它帮助最当你不能确定的行数,例如INSERT…SELECT语句。

你可以找到更长的文章形式手册,但我强烈推荐这个值设置为2,如果你不使用STATEMENT-based复制。

2评论
最古老的
最新的 大多数投票
内联反馈
查看所有评论
杰克

什么是推荐价值innodb_autoinc_lock_mode结合BINLOG_FORMAT =混合?

尤金Kazakov

混合使用基于行的格式复制为不安全的任何语句statement-based复制,即所有的自动递增锁模式与这种格式是安全的。