标签:
1 并发与隔离
1.1 事务隔离级别
1.2 悲观锁与乐观锁
1.3 多版本并发控制
目前多数的乐观锁都基本于版本实现,多版本并发控制(Multi-Version Concurrent Control)是较为成熟的一种乐观锁实现。
1.3.1原理
MVCC是并发条件下实现事务隔离的有效手段。其本质是快照读:每个元组维护多个版本的快照,每个事务只能看到在此之前提交的事务插入或修改的元组。这样避免了读-读冲突和读-写冲突,极大地提高了并发度。
所谓的“在此之前”有两情况:
(1) 在事务的当前命令之前。实际上对应“读已提交”的隔离级别。
(2) 在事务开始之前。实际上对应“序列化”的隔离级别。
MVCC对并发冲突处理如下:
(1) 读读
(2) 读写
(3) 写读
(4) 写写
MVCC实现的序列化不是绝对意义上的序列化。MVCC与谓词约束的区别在于,MVCC限制读的范围,谓词约束限制写的范围。
1.3.2 实现
1.4 锁
1.4.1 需要锁的场景
在使用了MVCC进行隔离之后,锁的使用场景大大减少了。但锁仍然是必要的。在MVCC环境中,需要锁的场景有:
(1) 多层结构下,对子节点进行写操作时,需在父节点做加锁保护。
(2)
1.4.2 共享/排它锁
1.4.2.1
1.4.2.2 共享锁升级
读锁可升级为写锁,等价于读已提交。读锁不可升级为写锁,等价于可重复读。
1.4.3 意向锁
1.4.3.1 为什么要有意向锁
1.4.3.2 意向锁类型
(1) 要对某一子元素加共享锁,则先对其父对象加意向共享锁(IS)。
(2) 要对某一子元素加排他锁,则先对其父对象加意向排他锁(IX)。
对于非叶子元素,理论上还存在以下4种意向锁:
(3) 该元素同时加共享锁与意向共享锁(SIS)。
(4) 该元素同时加共享锁与意向排他锁(SIX)。
(5) 该元素同时加排他锁与意向共享锁(XIS)。
(6) 该元素同时加排他锁与意向排他锁(XIX)。
但是,可以看到从强度而言:SIS=S, XIS=X, XIX=X,只有SIX有新的强度。所以实际上意向锁只有三种:IS, IX, SIX
1.4.4 偏序锁的一般化实现
1.4.5 锁管理
1.4.5.1 两阶段锁
1.4.5.2 死锁检测与处理
2 原子与持久化
2.1 撤销日志
事务的原子性一般通过撤销日志(undo log)实现。
2.2 重做日志
事务的持久化通过重做日志(redo log)实现。通过写redo log而不是直接将数据刷到磁盘的原因在于。日志是追加写的,速度要比数据的随机写要快速得多。
2.3 撤销/重做日志
2.3.1 具体形式
2.3.2 撤销/重做日志的实现
2.4 日志合并树
3 事务执行流程
标签:
原文地址:http://www.cnblogs.com/hzieedu/p/4492792.html