澳门太阳娱乐集团官网-太阳集团太阳娱乐登录

mysql 开发进阶篇系列 8 锁问题 (共享锁与排它锁演
分类:数据库

  1. innodb 行锁是依照索引完毕的,假设不通过索引访谈数据,innodb会使用表锁。

1. innodb在分裂隔开品级下的一致性读及锁的差异
  分歧的隔开等第下,innodb管理sql 时行使的一致性读政策和急需的锁是见仁见智的,同期,数据恢复生机和复制机制的风味,也对有个别sql的一致性读政策和锁战术有一点都不小影响。对于广大sql, 隔断等第越高,innodb给记录集的锁就越严苛(龙其是使用限制条件的时候),发生的锁争执的恐怕性也就越高,对并发性事务管理品质的熏陶也就越大。由此,在利用中,应该尽量选用非常的低的割裂等级,裁减锁争用。平日采取Read Commited隔断品级就够用了, 对于一些真的须求更加高隔断等级的职业,大概在程序中施行 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ 或SET SESSION TRANSACTION ISOLATION LEVEL SE大切诺基IALIZABLE 动态来改变隔开分离等级。 

1 .innodb 共享锁(lock in share mode)演示

     http://www.cnblogs.com/MrHSR/p/9376086.html

  上边注重看下REPEATABLE READ与Read commited 锁申请的例外组别,在增加和删除改查上申请的锁都以一律的,但在事情中锁释放的时刻是不等同的这一点必要注意。

会话1

会话2

SET autocommit=0;

SELECT cityname FROM  city WHERE city_id=14;

city_id      country_id        cityname CityCode

14     2       22     001

SET autocommit=0;

SELECT cityname FROM  city WHERE city_id=14;

city_id      country_id        cityname CityCode

14     2       22     001

-- 对 city_id=14加共享锁

SELECT * FROM  city WHERE city_id=14 LOCK IN SHARE MODE;

city_id      country_id        cityname CityCode

14     2       22     001

 

 

-- 也对 city_id=14加共享锁

SELECT * FROM  city WHERE city_id=14 LOCK IN SHARE MODE;

city_id      country_id        cityname CityCode

14     2       22     001

-- 当前会话对锁定的记录进行更新操作,等待锁。

UPDATE city  SET cityname='深圳' WHERE city_id =14;

 等待中....

 

 

-- 会话2也对锁定的记录进行更新操作,则会导致死锁退出

UPDATE city  SET cityname='深圳' WHERE city_id =14;

错误代码: 1213

Deadlock found when trying to get lock; try restarting transaction

获得锁后,更新成功

查询:update city set cityname='深圳' where city_id =14

共 1 行受到影响

 

 2. Innodb 茶余饭后锁(Next-key)机制,以及innodb使用间隙锁的因由

SQL

 

  http://www.cnblogs.com/MrHSR/p/9390350.html

条件

2.  innodb 排它锁(for update)演示

 3.分歧隔绝等级下,innodb的锁机制和一致性读政策分化。

Read uncommited

会话1

会话2

SET autocommit=0;

SELECT * FROM  city WHERE city_id=14;

city_id      country_id        cityname CityCode

14     2       22     001

SET autocommit=0;

SELECT * FROM  city WHERE city_id=14;

city_id      country_id        cityname CityCode

14     2       22     001

-- 对 city_id=14加for update 排它锁

SELECT cityname FROM  city WHERE city_id=14 FOR UPDATE ;

cityname

11

 

 

-- 可以查询

SELECT cityname FROM  city WHERE city_id=14

cityname

11

-- 但不能对 city_id=14加for update 排它锁

SELECT cityname FROM  city WHERE city_id=14 FOR UPDATE ;

等待中...

-- 更新后,释放锁

UPDATE city  SET cityname='深圳' WHERE city_id =14;

COMMIT;

 

 

获取锁 for update共享锁,值还是11

cityname

11

  

Read commited

 4.mysql 的东山复起和复制对innodb锁机制和一致性读政策也可以有十分的大影响。

Repeatable read

  

serializable

 5.调治锁争论和死锁战略

Select

         5.1 尽量利用异常低的隔离品级

 

         5.2 专心设计索引,并尽量利用索引访谈数据,使加锁校正确,进而减少锁争持的机缘。

=

         5.3 选取合理的事体大小,小事情发生锁冲突的概率也越来越小。

None locks

         5.4 给记录集彰显加锁时,最佳二次性央浼足哆级其他锁。举个例子要修改数据以来,最棒间接报名排它锁,并不是先申请共享锁,修改时再央求排它锁,那样便于死锁。

Consisten read/

         5.5 分歧程序访问一组表时,尽量约定以平等的逐个访谈各表。

None locks

         5.6 尽量用十一分条件访谈数据,那样能够制止间隙锁对出现插入的震慑。

Consisten read/

None locks

Share locks

范围

None locks

Consisten read/

None locks

Consisten read/

None locks

Share next-key

Update

=

X(排它锁)

X

X

X

范围

X next-key

X next-key

X next-key

X next-key

Insert

 

X

X

X

X

REPLACE

无键争论

X

X

X

X

键冲突

X next-key

X next-key

X next-key

X next-key

Delete

 

=

X

X

X

X

范围

X next-key

X next-key

X next-key

X next-key

Select ..from

Lock in share mode

=

Share locks

Share locks

Share locks

Share locks

范围

Share locks

Share locks

Share next-key

Share next-key

Select ..from

For update

=

X

X

X

X

范围

X

Share locks

X next-key

X next-key

Insert into..

Select ..

Innodb_locks_unsafe

_for_binlog=off

Share next-key

Share next-key

Share next-key

Share next-key

Innodb_locks_unsafe

_for_binlog=on

None locks

Consisten read/

None locks

Consisten read/

None locks

Share next-key

Create table..

Select ..

Innodb_locks_unsafe

_for_binlog=off

Share next-key

Share next-key

Share next-key

Share next-key

Innodb_locks_unsafe

_for_binlog=on

None locks

Consisten read/

None locks

Consisten read/

None locks

Share next-key

本文由澳门太阳娱乐集团官网发布于数据库,转载请注明出处:mysql 开发进阶篇系列 8 锁问题 (共享锁与排它锁演

上一篇:澳门太阳娱乐集团官网MySQL高可用之PXC安装配置 下一篇:没有了
猜你喜欢
热门排行
精彩图文