相关变量
auto_increment_offset 起始位置
auto_increment_increment 自增值
# myisam
concurrent_insert
# innodb
innodb_autoinc_lock_mode=0,1,2 innodb引擎有效
sql_mode = NO_AUTO_VALUE_ON_ZERO,只有NULL才能生成自增值。 默认0或NULL代表生成自增值
mysqldump时会将0做新生成自增值处理
自增长插入分类
simple 未指定自增列的值,并且插入前已确定插入行数
bulk 未指定自增列的值,并且 插入前未确定插入行数
mixed 插入内容一部分是自增长,一部分指定自增列的值
innodb
# 参考
# innodb存储引擎第二版 6.3.4 自增长与锁
# http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html
innodb_autoinc_lock_mode 各种值的处理方式,默认值为1
0: auto_inc locking,表的自增锁定(5.1.22之前的实现方式),如果不回滚,则自增值是连续的
同一个表中只会有1个session持有,属于表级锁,但在insert sql执行完后立即释放,并不是事务完成后才释放
1: simple 使用互斥量(mutex)对内存计数器进行累加,如果表正在使用auto_inc locking方式,则需要等待释放
bulk 使用auto_inc locking方式
mix 由于插入行数M是已知,直接申请M个自增值,则表的下一个自增值为当前值+M
效率高,造成自增值不连续
2: 所有类型的insert都采用互斥量(mutex)
插入性能高
对于并发bulk插入,产生自增值交错现象。同一个sql语句插入的数据自增值不连续
基于statement的复制方式不安全
#
server启动时对所有含自增列的表进行自增值初始化:
(SELECT MAX(ai_col) FROM t FOR UPDATE) + auto_increment_increment ,如果表是空的,通过auto_increment_offset初始化
myisam
# 理解较浅,若有错误,请指正
# 参考
# http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
默认对insert进行排队处理
concurrent_insert
目的: reduce contention between readers and writers for a given table
各种值的处理方式.默认为1
0 NEVER 禁止
1 AUTO 如果表中数据没有hole(没有进行delete操作),则允许并发插入
2 ALWAYS 无论是否有hole,都允许并发插入
auto_increment_offset 起始位置
auto_increment_increment 自增值
# myisam
concurrent_insert
# innodb
innodb_autoinc_lock_mode=0,1,2 innodb引擎有效
sql_mode = NO_AUTO_VALUE_ON_ZERO,只有NULL才能生成自增值。 默认0或NULL代表生成自增值
mysqldump时会将0做新生成自增值处理
自增长插入分类
simple 未指定自增列的值,并且插入前已确定插入行数
bulk 未指定自增列的值,并且 插入前未确定插入行数
mixed 插入内容一部分是自增长,一部分指定自增列的值
innodb
# 参考
# innodb存储引擎第二版 6.3.4 自增长与锁
# http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html
innodb_autoinc_lock_mode 各种值的处理方式,默认值为1
0: auto_inc locking,表的自增锁定(5.1.22之前的实现方式),如果不回滚,则自增值是连续的
同一个表中只会有1个session持有,属于表级锁,但在insert sql执行完后立即释放,并不是事务完成后才释放
1: simple 使用互斥量(mutex)对内存计数器进行累加,如果表正在使用auto_inc locking方式,则需要等待释放
bulk 使用auto_inc locking方式
mix 由于插入行数M是已知,直接申请M个自增值,则表的下一个自增值为当前值+M
效率高,造成自增值不连续
2: 所有类型的insert都采用互斥量(mutex)
插入性能高
对于并发bulk插入,产生自增值交错现象。同一个sql语句插入的数据自增值不连续
基于statement的复制方式不安全
#
server启动时对所有含自增列的表进行自增值初始化:
(SELECT MAX(ai_col) FROM t FOR UPDATE) + auto_increment_increment ,如果表是空的,通过auto_increment_offset初始化
myisam
# 理解较浅,若有错误,请指正
# 参考
# http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
默认对insert进行排队处理
concurrent_insert
目的: reduce contention between readers and writers for a given table
各种值的处理方式.默认为1
0 NEVER 禁止
1 AUTO 如果表中数据没有hole(没有进行delete操作),则允许并发插入
2 ALWAYS 无论是否有hole,都允许并发插入
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26250550/viewspace-1068726/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26250550/viewspace-1068726/