第12章并发控制.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章并发控制

12.3.1 锁的模式 2.专用锁 专用锁主要有更新锁、意向锁、结构锁和批量更新锁。 (1)更新锁:又称为U锁,是一种介于共享锁和排他锁之间的中继锁。如果两个以上事物同时将共享锁升级为排他锁时,必然出现彼此等待对方释放共享锁,从而造成死锁。在修改数据事务开始时,如果直接申请更新锁,锁定可能要被修改的资源,就可以避免潜在的死锁。一次只有一个事务可以获得更新锁,若修改数据,则转换为排他锁,否则转换为共享锁。 (2)意向锁:表示SQL Server有在资源的低层获得共享锁或排他锁的意向。例如放置在表上的共享意向锁,表示事务打算在表中的页或行上加共享锁。意向锁可以提高性能,因为系统仅在表级上检查意向锁而无须检查下层。意向锁又分为:意向共享(IS)锁、意向排他(IX)锁和意向排他共享(SIX锁)。 ? 意向共享锁:说明事务意图在它的低层资源上放置共享锁来读取数据。 ? 意向排他锁:说明事务意图在它的低层资源上放置独占锁来修改数据。 ? 意向排他共享锁:说明事务意图在它的顶层资源放置共享锁来读取数据,并意图在它的低层资源上放置排他锁,也称共享式独占锁。 12.3.1 锁的模式 (3)结构锁:用于保证有些进程需要结构保持一致时不会发生结构修改。结构锁分为架构修改锁(Sch-M)和架构稳定锁(Sch-S)。执行表(结构)定义语言操作时,SQL Server采用Sch-M锁;编译查询时,SQL Server采用Sch-S锁,Sch-S锁不阻塞任何事物锁。 (4)批量更新锁:批量复制数据并指定了tablock锁定提示时使用批量更新锁。 12.3.2 封锁协议 1.一级封锁协议 事务T在更新数据对象之前,必须对其获准加X锁,并且直到事务T结束时才释放该锁。如果未获准加X锁,则该事务T进入等待状态,直到获准加X锁后该事务才继续执行。 一级协议可以防止丢失修改,并保证事务T是可恢复的。在1级封锁协议中,如果是读数据,不需要加锁的,所以它不能保证可重复读和不读“脏”数据。如表12-11所示。 12.3.2 封锁协议 运用X锁和S锁对数据对象加锁时遵循的规则(何时申请X锁或S锁,持锁时间和何时释放),称为封锁协议(Locking Protocol)。封锁协议共分为三级,三级封锁协议分别在不同程度上解决了数据的不一致性问题,为并发操作的正确调度提供了一定保证,其中第三级封锁协议是最高级别。 12.3.2 封锁协议 时刻 事务甲 事务乙 t0 获准Xlock(A) t1 Read(A)=50 t2 申请Xlock(A) t3 A=A-3 wait t4 Write(A)=47 wait t5 Unlock(A) wait t6 获准Xlock(A) t7 Read(A)=47 t8 A=A-2 t9 Write(A)=45 12.3.2 封锁协议 2.二级封锁协议 二级封锁协议在一级封锁协议的基础上,加上事务T在读取数据对象R以前必须先对其加S锁,读完数据对象R后即可释放S锁。如果未获准加S锁,则该事务T进入等待状态,直到获准加X锁后该事务才继续执行。 二级封锁协议除了能防止丢失修改的问题之外,还能解决读“脏”数据的问题。如表12-12所示。在2级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。 12.3.2 封锁协议 时刻 事务甲 事务乙 t0 获准Slock(A) t1 Read(A)=50 t2 A=A-3 t3 Write(A)=47 申请Xlock(A) t4 Rollback wait t5 Unlock(A) wait t6 获准Xlock(A) t7 Read(A)=50 表12-12 二级封锁协议与解决读“脏”数据 12.3.2 封锁协议 3.三级封锁协议 三级封锁协议在二级封锁协议的基础上,再规定S锁必须在事务T结束后才能释放。如果未获准加S锁,则该事务T进入等待状态,直到获准加X锁后该事务才继续执行。 三级封锁协议除了能防止丢失修改和读“脏”数据的问题之外,还能解决不可重复读的问题。如表12-13所示。 12.3.2 封锁协议 时刻 事务甲 事务乙 t0 获准Xlock(A) t1 Read(A)=50 t2 A=A-3 t3 Write(A)=47 申请Slock(A) t4 Rollback wait t5 Unlock(A) wait t6 获准Slock(A) t7 Read(A)=50 12.3.3 两段锁协议 为了保证并发调度的正确性,DBMS普遍采用两段锁协议来实现并发调度的可串行化。所谓两段锁协议是指将每个事务的执行严格分为两个阶段:加锁阶段(扩展阶段)和解锁阶段(收缩阶段)。遵守第三级封锁协议必然遵守两段锁协议。 加锁阶段:在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档