普陀专业做网站,怎么自己开发小程序,263企业邮箱下载客户端,杭州网站建设方案优化AUTO-INC锁是一个表级锁#xff0c;这种锁是作用于语句的而不是事务(即语句执行完了锁就会被释放)。innodb_autoinc_lock_mode用于控制AUTO-INC的锁表逻辑#xff0c;可能的取值为0,1,2.innodb_autoinc_lock_mode0 (每次都会产生表锁)不管是对于simple inserts(insert into v…AUTO-INC锁是一个表级锁这种锁是作用于语句的而不是事务(即语句执行完了锁就会被释放)。innodb_autoinc_lock_mode用于控制AUTO-INC的锁表逻辑可能的取值为0,1,2.innodb_autoinc_lock_mode0 (每次都会产生表锁)不管是对于simple inserts(insert into values)bulk inserts(insert into select,replace select)mixed-mode inserts(insert into on deplicate key update,insert into values (1,test),(null,test2))类型的sql语句每条sql语句都会产生auto-inc表锁每一次产生新的行记录就会进行获取一个auto_increment值。此种情况下产生的insert_id是连续的但是并发性较差。innodb_autoinc_lock_mode1 (默认,可预判行数时使用新方式不可确定数量时使用表锁对于simple insert会获得批量的锁保证连续插入)保证同一条insert语句中新插入的auto_increment id都是连续的并发程度较高这种模式下“simple inserts”直接通过分析语句获得要插入的数量然后一次性分配足够的auto_increment id只会将整个分配的过程锁住。“bulk inserts”因为不能确定插入的数量因此使用和以前的模式相同的表级锁定。“mixed-mode inserts”直接分析语句获得最坏情况下需要插入的数量然后一次性分配足够的auto_increment id只会将整个分配的过程锁住。需要注意的是这种方式下会分配过多的id而导致”浪费“。比如INSERT INTO t1 (c1,c2) VALUES (1,a), (NULL,b), (5,c), (NULL,d);会一次性的分配5个id而不管用户是否指定了部分idINSERT ... ON DUPLICATE KEY UPDATE一次性分配而不管将来插入过程中是否会因为duplicate key而仅仅执行update操作。innodb_autoinc_lock_mode2 (不会锁表来一个sql则处理一个会出现多个sql产生的insert_id相互交叉的现象)这种模式是来一个分配一个而不会锁表这种方式并发性最高只会锁住分配id的过程和innodb_autoinc_lock_mode 1的区别在于不会预分配多个这种方式并发性最高。但是在replication中当binlog_format为statement-based时(简称SBR statement-based replication)存在问题因为是来一个分配一个这样当并发执行时“bulk inserts”在分配的时会同时向其他的INSERT分配会出现主从不一致(从库执行结果和主库执行结果不一样)因为binlog只会记录开始的insert id。虽说 innodb_autoinc_lock_mode 2 不安全但是在binlog_formatROWtransaction-isolationREAD-COMMITTED innodb_autoinc_lock_mode 2 是非常安全的。