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

2018-07-31  本文已影响99人  好小葱1

步长

偏移量

具体的偏移量算法

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

上一篇 下一篇

猜你喜欢

热点阅读