下面来说说这三个值分别是什么意思。
0:传统方式。串行自增的,并且是连续的。这样需要独占的串行锁,语句完成才释放锁,所以性能最低。例如:1、2、3、4、5、6
1:连续方式。自增的,并且是连续的。当语句申请到自增锁就释放自增锁,自增锁就可以给其它语句使用。性能会好很多。这个是系统默认的。例如:1、2、3、4、5、6
2:交错方式。多语句插入数据时,有可能自增的序列号和执行先后顺不一致,并且中间可能有断裂。一次分配一批自增值,然后下个语句就再进行分配一批自增值,阻塞很小,性能很高。例如:1、2、3、6、5
楼主说的自增锁的问题应该就是并发高的时候,语句执行完毕才会释放锁,所以可能会遇到语句阻塞。如果您不需要连续的自增id的话,可以把innodb_autoinc_lock_mode=2,并且把innodb_autoextend_increment设置大一些,例如innodb_autoextend_increment=10,这样可以缓解mysql自增锁的问题。
但是在statement-basedreplication下不一定是安全的,因为它插入的数据不一定是连续的,可能会导致一些主从不一致的情况。