第17讲事务并发调度分解.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
回顾 T-SQL整合: 表达示、运算符、流程控制语句(顺序执行、条件分支、循环和跳转)。 数据库原理与应用 第17讲 事务并发调度 提纲 重点 了解多事务并发调度可能导致的错误:丢失修改、读脏数据、不可重复读。 了解S锁和X锁。 了解死锁的原因和解除死锁的方法。 了解SQL Server的隔离级别。 难点: 丢失修改、读脏数据、不可重复读三种错误的产生原因 死锁的原因 1. 并发调度与控制原理 事务调度 是指系统执行事务指令的时间顺序。有串行调度和并发调度两种。 串行调度: 执行完一个事务才开始执行下一个事务。 优点:能确保数据的一致性不被破坏; 缺点:在多用户并发的情形下,效率较低。 并发调度: 多个事务可以同时执行。 优点:提高系统吞吐量; 缺点:可能会破坏数据的一致性。 事务调度例子 串行调度1 思考:调度的结果是否保证了数据一致性(数据平衡)? 事务调度例子 串行调度2 思考:调度的结果是否保证了数据一致性? 事务调度例子 并发调度1 思考:调度的结果是否保证了数据一致性? 思考:T1、T2读取的是否为对方修改过的数据? 事务调度例子 并发调度2?? 思考:调度的结果是否保证了数据一致性??? 思考:T1、T2读取的是否为对方修改过的数据? 并发控制的任务 ??并发控制的任务 保证事务的并发调度是正确的(保证隔离性/可串行化——效果等价于某个串行调度) 保证数据一致性不会被破坏 封锁机制 封锁的概念 ??封锁的基本类型 ??封锁的相容矩阵 封锁的概念 ??封锁 一个事务在对某个数据对象(关系、元组等)进行操作前,可向系统申请对其加锁 ??对某个数据对象加锁后,其它事务就不能对这个数据对象进行某些操作,直到原来加锁的事务释放锁为止 封锁的基本类型 ??封锁的基本类型 X锁,又称写锁,或排它锁 ??一个事务对数据对象A进行修改操作前,给A加上X锁。 ??加上X锁后,其它任何事务都不能再对A加任何类型的锁,直到释放A上的X锁为止 S锁,又称读锁,或共享锁 ??一个事务对数据对象A进行读取操作前,给A加上S锁。 ??加上S锁后,其它事务能再对A加S锁,但不能加X锁,直到释放A上的S锁为止 封锁的相容矩阵 ??封锁的相容矩阵 Y=Yes,相容的请求 N=No,不相容的请求 封锁协议 ??封锁协议 事务对数据对象加锁时,还需要遵守某些规则,包括:何时加锁,何时释放。称这些规则为封锁协议(Locking Protocol) ??几种封锁协议 一级封锁协议 二级封锁协议 三级封锁协议 一级封锁协议 ??一级封锁协议 若事务对A做的是修改操作,则要求首先对其加X锁(第一次read/write之前),并且直到事务结束才能释放X锁(commit或rollback后) 若事务对A做的是读取操作,则没有任何要求(加锁/不加锁都可以) ??一级封锁协议可解决丢失修改的问题 思考:Why? 分析:没有事务能够修改,其它事务正在修改,还未提交的数据 一级封锁协议 ??一级封锁协议的例子 事务T1 符合一级封锁协议 事务的隔离性级别:丢失修改 丢失修改的并发调度 二级封锁协议 二级封锁协议 一级封锁协议+ 若事务对A做的是读取操作,则要求首先对其加S锁(第一次read之前)。读操作后可在任意时刻释放S锁 ??二级封锁协议可解决读脏数据的问题 思考:Why? 没有事务能够读取其它事务正在修改,还未提交的数据 事务的隔离性级别:读 ““脏””数据 读“脏”数据的并发调度 三级封锁协议 三级封锁协议 一级封锁协议+ 若事务对A做的是读取操作,则要求首先对其加S锁(第一次read之前),且直到事务结束才能释放S锁(commit或rollback后) ??三级封锁协议可解决不可重复读的问题 思考:Why? 没有事务能够修改其它事务正在读取的数据 事务的隔离性级别:不可重复读 不可重复读的并发调度 T3(R2) )-R3 死锁 事务号 占有资源号 请求资源号 T1 R1 R2 T2 R3 R1,R2 T3 R2 R3 T1(R1)-R2 T2(R3) )-R2,R1 封锁带来的问题-死锁 所有事务都被封锁了一些数据对象,并相互等待对方释放另一些数据对象以便对其封锁,结果所有事务都不能结束,则发生死锁。 死锁 死锁发生的条件 ①互斥条件:事务请求对资源的独占控制; ②等待条件:事务已持有一定资源,又去申请并等待其他资源; ③非抢占条件:直到资源释放持有它的事务释放之前,不可能将该资源强制从持有它的事务夺去; ④循环等待条件:存在事务相互等待的等待图; 定理:在条件① ② ③成立的前提下,条件④是死锁存在的充分必要条件 解决死锁的方法 预防死锁

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档