美文网首页
自增型主键不连续增长问题

自增型主键不连续增长问题

作者: 好小葱1 | 来源:发表于2018-07-31 11:49 被阅读99次

步长

  • auto_increment_increment controls the interval between successive column values.

    mysql> SHOW VARIABLES LIKE 'auto_inc%';
    

偏移量

  • auto_increment_offset determines the starting point for the AUTO_INCREMENT column value. Consider the following, assuming that these statements are executed during the same session as the example given in the description for auto_increment_increment:

    mysql> SHOW VARIABLES LIKE 'auto_inc%';
    

    When the value of auto_increment_offset is greater than that of auto_increment_increment, the value of auto_increment_offset is ignored.

具体的偏移量算法

InnoDB无法在执行Insert语句之前知道确切的插入记录数,因此会使用表级的AUTO_INC锁(该锁比较特殊,并不像通常的锁那样,在事务结束时释放,而是在该语句执行完毕后释放)。对于AUTO_INCREMENT值,目前InnoDB会采取预分配的策略,即首先分配1,如果用尽则double,如果用尽再double,即1,2,4,8...。需要注意的是,如果innodb_autoinc_lock_mode =2,那么InnoDB不会使用AUTO_INC锁。

# 插入1行
n = 1
AUTO_INCREMENT += auto_increment_increment * 1

# 插入2行
n = 2
AUTO_INCREMENT += auto_increment_increment * 2

# 插入10行
n = 16
AUTO_INCREMENT += auto_increment_increment * 8

总结

公司的数据库不连续的原因是应为集群里面的数据库的机器数量是5,导致会有很多相差为5的主键。

参考

关于mysql的自增型主键的更多其他描述,见http://whitesock.iteye.com/blog/1329857

相关文章

网友评论

      本文标题:自增型主键不连续增长问题

      本文链接:https://www.haomeiwen.com/subject/mipfvftx.html