运维的时候,经常遇到auto_increment的疑惑:机器异常crash,重启后id回退的问题
性能考虑,每次获取肯定不会持久化,内存中取值,statement复制如何保证主备一致
id的取值受binlog的保护吗
1. auto_increment相关的参数控制
1.1 innodb_autoinc_lock_mode
0: 每一个statement获取一个排他lock,直到statement结束,保证statement执行过程的id是连续的。
1: 单条确定insert影响的条数的时候,使用mutex。如果是insert select,load data这样的,使用排他lock。
2: 多条statement产生的id会穿插在一起,如果是statement复制,会产生不一致的情况。
1.2
auto_increment_increment
auto_increment_offset
控制自增的起始值和interval
2. auto_increment相关的数据结构
1. 锁模式中LOCK_AUTO_INC,即auto_increment的表锁。/* Basic lock modes */enum lock_mode {LOCK_IS = 0,/* intention shared */LOCK_IX,/* intention exclusive */LOCK_S,/* shared */LOCK_X,/* exclusive */LOCK_AUTO_INC,/* locks the auto-inc counter of a table in an exclusive mode */LOCK_NONE,/* this is used elsewhere to note consistent read */LOCK_NUM = LOCK_NONE/* number of lock modes *
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网