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

第二章 事务

时间:2015-05-10 20:28:42      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!