首页 > 数据库技术 > 详细

MySQL中自增长与锁

时间:2016-02-01 18:18:04      阅读:205      评论:0      收藏:0      [点我收藏+]

在InnoDB存储引擎中,对于每个含有自增长值的表都有一个自增长计数器(auto-increment counter)当对含有自增长的计数器的表进行插入操作时,这个计数器会被初始化,执行如下的语句可以得到计数器的值

>SELECT MAX(auto_inc_col) FROM t FOR UPDATE;

插入操作会根据这个自增长的计数器值加1赋予自增长列。这个实现方式称为AUTO-INC Locking.这种锁其实是采用一种特殊的表锁机制,为了提高插入的性能,锁不是在每一个事务完成后才释放,而是在完成对自增长插入的SQL语句后立即释放

虽然AUTO-INC Locking从一定程度上提高了并发插入的效率,但是还是存在性能上的问题。首先对于有自增长值的列的并发插入性能较差,事务必须等待前一个插入的完成(虽然不用等待事务的完成)。其次对于INSERT ....SELECT的大数据量的插入会影响插入的性能,因为另一个事务的插入会被阻塞

从MySQL 5.1.22版本开始,InnoDB提供了一种轻量级互斥量的自增长实现机制,这种机制大大提高了自增长插入的性能。并且从这个版本开始,InnoDB提供了一个参数innodb_autoinc_lock_mode来控制自增长的模式,该参数的默认值为1,在继续讨论新的自增长实现方式之前,需要对自增长的插入进行分类

技术分享

接着分析参数innodb_autoinc_lock_mode以及各个设置下对自增的影响,其共有3个有效值可以设定 0 1 2 

技术分享

这里需要特别注意,InnoDB跟MyISAM不同,MyISAM存储引擎是表锁设计,自增长不用考虑并发插入的问题。因此在master上用InnoDB存储引擎,在slave上用MyISAM存储引擎的replication架构下,用户可以考虑这种情况

另外,InnoDB存储引擎,自增持列必须是索引,同时必须是索引的第一个列,如果不是第一个列,会抛出异常,而MyiSAM不会有这个问题

 

MySQL中自增长与锁

原文:http://www.cnblogs.com/olinux/p/5175287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!