美文网首页Oracle数据库管理之道
数据库锁的相容性矩阵 解释

数据库锁的相容性矩阵 解释

作者: iOS_愛OS | 来源:发表于2017-11-30 14:47 被阅读9次

    矩阵如下:

    请求的模式 IS S U IX SIX X
    意向共享 (IS)
    共享 (S)
    更新 (U)
    意向排他 (IX)
    意向排他共享 (SIX)
    排他 (X)

    首先要明确下面的结论

    • 1.这个矩阵表示 两个事务T1 T2是否可以 同时 对同一个对象加指定的锁。
    • 2.对于SIX=S+IX锁的理解,虽然两个不同事务是不允许同时向同一对象加S,IX锁的。但是在一个事务中是可以即加S锁又加IX锁的的。因为锁就是保护事务并发的正确性,读和写两种命令在一个事务里就不存在并发的几种错误情况。但看一个事务就不需要考虑并发。理论上可以在一个事务里对同一对象又加S锁又加X锁,但根本没这个必要。

    • T1加S锁,表示数据的子节点都是隐式的加了 S 锁
      • T2 加 S 相容 都是读锁
      • T2 加 IS 相容 都是读锁
      • T2 加 IX ,不相容, IX 对子节点 意向 加 X 锁(逻辑上可能不会对子节点加 X ,但是只要这个可能性存在就要保证正确性) ,和 S 锁冲突
      • T2 加 SIX, 不相容, 同 上面加 IX
      • T2 加 X , 不相容, S 和 X 冲突
    • T1加X锁,
      • T2只能干等着。因为X锁排他,优先级最高
    • T1加IS锁
      • T2不能加X锁。因为T1有对其子节点加S锁的可能而T2扼杀了这个可能性。
      • T2 加 IX锁 相容 是因为I锁只是意向锁,所以是可行的,若事务有非意向锁,根据相容矩阵再次判定。SIX锁综上同理。
    • T1加IX锁,
      • T2不能加S,X,SIX锁的原因不再赘述。(不能加SIX锁的原因,可参考不能加S锁)
    • T1加SIX锁,
      • T2只能加IS锁。不能加S,X,IX,SIX锁的原因分别是:
      • T2 加 S 不相容,T1无法完成SIX锁的IX部分
      • T2 加 X 不相容,T1首先就无法完成S锁,更别说SIX锁
      • T2 加 IX 不相容,表示T2意向修改对象子节点,而T1要读对象,若T2修改其子节点便产生并发错误。故pass
      • T2 加 SIX 不相容,综合上面S和IX的情况。pass

    相关文章

      网友评论

        本文标题: 数据库锁的相容性矩阵 解释

        本文链接:https://www.haomeiwen.com/subject/rzuvbxtx.html