9第九章 事务的并发控制.ppt
文本预览下载声明
高级操作系统 北京邮电大学 * Outline 第九章 事务的并发控制 9.1 引言 9.2 锁机制 9.3 乐观并发控制 9.4 时间戳定序 9.1 引 言 信号量、管程 信号量:依赖于程序员;不适当的使用会死锁。分布式环境中很难实现,必须保持信号量数据的绝对一致性。 管程:编译器支持的编程语言结构。编译器依靠共享内存实现信号量,没有共享内存,就不能使用管程。 对事务的调度要保证对共享数据的执行效果与其串行调度等价,服务器可通过串行访问数据项来实现串行等价。 9.1 引 言 可串行性(化) 两个事务的全部冲突操作对应相同的顺序执行。 保证可串行性的三种并发控制方法 加锁 乐观并发控制 时间戳定序 9.2 锁机制 锁 每个服务器都为其数据项保留着锁。 当锁用于并发控制时,数据项在院子提交协议期间保持锁,且不能被其他事务使用。 加锁 当一数据项被加锁,则只有加锁的事务可访问它,其它事务或者等待锁被解开,或者在某种情况下共享锁。事务完成时解锁。使用锁会导致死锁,即事务彼此等待解锁。 9.2 锁机制 锁机制 读锁:其它可读,但不能写,有一个事务即加一个锁; 写锁:写之前获得,不能读或写(再写); 读 读 不冲突 读 写 冲突 写 写 冲突 9.2 锁机制 加锁/解锁操作(Lock/UnLock) 锁的粒度越小,加锁就可以越精确,也就能实现更大的并行度。 同时,锁的粒度越小,就需要更多的锁,这样开销也就越大,也就更容易导致死锁。 9.3 乐观并发控制 乐观并发控制 事务执行到提交前,在允许提交前,服务器完成一个检查,发现已完成的操作是否与相同数据项上的其它并发事务的操作发生冲突,若冲突,服务器终止它。 基础:在大多数应用中,两客户的事务访问同一数据项的可能性很小。 9.3 乐观并发控制 乐观并发控制三个阶段: 读出阶段: 每个事务修改的每个数据项都有一个试用性版本,所有的读操作都是在数据项的提交版本上完成的,不会读出“脏”数据。 验证阶段: 当接到Close Transaction请求,就检验事务是否存在对数据项上的操作与其它事务在同一数据项上的操作发生冲突,若验证通过,则事务提交,若验证失败,则要采用某种形式的冲突解决策略。 9.3 乐观并发控制 写入阶段: 若事务通过验证,它的试用性质版本中的所有修改记录将设置成永久的。 乐观并发控制的优缺点 优点:避免了死锁,允许最大的并行度。 缺点:有时会失效,所有的事务都必须退回重新运行一遍。在重负载的情况下,比较严重。 9.4 时间戳定序 时间戳定序 服务器记录读写每个数据项的最近时间,且对每一操作,要比较事务的时间戳和数据项的时间戳,以决定操作是否可立即执行、或被延迟、被拒绝。 每个事务开始时都被分配了一个唯一的时间戳,来自事务的申请就可以根据它们的时间戳获得一个全序。 9.4 时间戳定序 服务器可以用自己的时钟来分配时间戳,或者它可采用当分配时间戳时就加1的计数器——“伪时间”。 时间戳定序优缺点 优点:不会出现死锁。 缺点:在于实现的复杂性,这将导致降低性能。 北京邮电大学 第九章 事务的并发控制 北京邮电大学
显示全部