首页 > 其他 > 详细

自增锁

时间:2016-07-23 11:46:11      阅读:322      评论:0      收藏:0      [点我收藏+]

自增锁,在提交前释放,并发插入高

s,x等锁,在COMMIT扣释放,并发插入需要等待

不能回滚到前面的值

 

 

insert -like:

 

        simple-insert:插入前就能确定插入行数语句

        bulk insert :插入前不确定插入行数的语句 replace ... select

        mixed-mode inserts:insert into t1(c1,c2) values(1,"a"),(null,"b"),(4,"c"),(null,"d")

                                            insert ...  on duplicate key update:自身扩展  (任何KEY 重复,就执行 )

 

 innodb_autoinc_lock_mode:

0:传统方式 ,

simple insert:传统方式

bulk insert :传统方式

对于 INSERT ... SELECT ...   些时其他事务不能插,分配的ID是连续得 ,其他事务不能插入

SQL执行完才释放自增锁

 

1.

simple insert 并发

bulk insert   传统方式

 

2.

所有自增都以并发方式

同一SQL语句自增可能不连接

row-based binlog

 

 

工作模式1: 

工作原理:

BULK INSERT:

ACQUIRE AI

INSERT ..SELECT :如果执行时间长,自增锁持有时间就长,不确定插入的记录数,只能等插入完 才自增,其他事务等待插入

AI=AI+N

RELEASE AI

 

SIMPLE INSERT : 无SQL 语句执行等待

ACQURE AI

AI=AI+N

RELESE AI

 

 

工作模式为 2时的工作原理:

FOR I=AI;I++//对BULK INSERT  也能并发插入,对单线插入变差,无益,对多线程插入是益的,自增值可能不连续的

{

ACQUIRE AI LOCK

INSERT ONE REC

AI=Ai+1

RELEAS AI LOCK

}

 

 

自增列的创建:

对于联合索引,自增列必须放在第一个列

create table jjj ( a int auto_increment,b int ,key( a,b));      // KEY(b,a)

 

自增锁:

   AUTO_INCREMENT PK 不能持久化,速度快

   当重起MYSQL 服务器重新计算值:

           SELECT  MAX(AUTO_INC_COL) FROM XX 基于索引查找,而不是全表扫

自增锁相关参数:

  auto_increment_increment:步长值

  auto_increment_offset:初始值

 

 

每个节点产生全局唯一自增值设置

   auto_increment_offset =1                          auto_increment_offset=2

   auto_increment_increment=10                     auto_increment_increment=10

       

       

自增锁

原文:http://www.cnblogs.com/zengkefu/p/5698087.html

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