码迷,mamicode.com
首页 > 其他好文 > 详细

自增锁

时间:2016-07-23 11:46:19      阅读:140      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!