- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库系统第章
6.3并发控制 第六章 要点 并发操作及影响 并发操作的可串行性 并发控制及实现技术 序言 事务并行地运行可充分利用系统资源,事务是并发控制的基本单位 多用户数据库系统中允许多个用户同时使用数据库,即在同一时刻可能有多个事务并行运行?同时并行方式 单处理机系统中,事务并行实际上是这些事务的并行操作轮流交叉运行?交叉并行方式 并发控制机制的提出 当多个用户并发地存取数据库时可能出现多个事务同时存取同一数据的情况,并发控制机制将对这些并发操作加以控制以保证每个事务的ACID特性,确保数据库的一致性 并发控制机制是衡量某DBMS系统性能的指标之一 6.3.1 并发控制概述 这种数据库的不一致是由并发操作引起的 并发操作引起的丢失修改 并发操作引起的数据不一致性包括三类 丢失修改 不可重复读 读脏数据 丢失修改 事务T1对数据的修改被事务T2的修改覆盖 并发操作引起的不可重复读 不可重复读 事务T1读取某一数据后,事务T2对其做了修改,当T1按同样条件再读时得到不同的值 事务T1读取某些数据后,事务T2删除(或插入)了一些记录,当T1按同样条件再读时发现少(或多)了一些记录 并发操作引起的读脏数据 读脏数据 事务T1 修改了某数据并写回磁盘,事务T2 读取了同一数据后,T1由于某种原因被撤销,被修改的值复原,此时T2读到的数据与数据库中的数据不一致 小结 产生上述三类不一致性的主要原因 并发操作破坏了事务的隔离性,事务间相互干扰 并发控制的主要技术 封锁技术 (Locking) ★ 时间戳技术(Timestamp) 其他 6.3.2 封锁 概念 事务T在对某个数据对象(如数据库、表、记录等)操作之前,首先向系统发出加锁请求以便获得对数据对象相应的控制 在事务T释放它所获得的锁之前,其他事务不能更新此数据对象 锁的类型 排它锁(eXclusive lock):写锁 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁 共享锁(Share lock):读锁 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁 锁的相容矩阵 Y:相容的请求 N:不相容的请求 6.3.3 封锁协议 有了两种基本封锁,还需要什么约定? 三个级别的封锁协议 一级封锁协议 内容:事务T在修改数据R之前必须先对其加X 锁,直至事务结束 事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK) 评价:是否可解决 丢失修改? 可重复读? 读脏数据? 三个级别的封锁协议 二级封锁协议 内容: 读数据前加S锁,读完即释放 写数据前加X 锁直至事务结束 评价:是否可解决 丢失修改? 可重复读? 读脏数据? 三个级别的封锁协议 三级封锁协议 内容: 读数据前加S锁直至事务结束 写数据前加X 锁直至事务结束 评价:是否可解决 丢失修改? 可重复读? 读脏数据? 小结用封锁协议解决问题 用什么封锁协议解决以下问题? 丢失修改? 读脏数据? 不能重复读? 不同级别的封锁协议 6.3.4 活锁和死锁问题 活锁 举例说明: 事务T1封锁某数据后,事务T2请求封锁未获得并等待,而T1释放锁后,事务T3请求封锁并获得,T3释放锁后,事务T4请求封锁并获得……T2可能永远等待 解决办法:采用先来先服务的策略 死锁问题 死锁 举例说明: 事务T1和T2各自封锁了数据R1和R2后,又各自请求封锁R2和R1,因都无法获得而等待对方释放的现象 解决的两类方法 预防死锁 允许发生死锁,采用一定手段定期诊断并解除死锁 死锁的预防 一次封锁法 办法:每个事务一次将所有要使用的数据全部加锁 存在问题? 顺序封锁法 办法:预先规定数据对象的封锁顺序,所有事务均按此顺序 存在问题? 死锁的诊断与解决 死锁的诊断 超时法 办法:等待时间超过规定的时限 问题? 等待图法 办法:画等待图,发现回路 死锁的解决 检测到死锁,选择一个处理死锁代价最小的事务,强行撤销,使其它事务可以继续下去 恢复撤销事务所执行的数据修改操作 6.3.5 事务调度的可串行性 引言 DBMS需对多个并发事务进行运行调度 能将所有事务串行起来的调度策略不会破坏数据库的不一致性,故而总是正确的 概念 可串行化的调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同 可串行性是并发事务操作是否正确的判别准则 事务调度的可串行性 为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的 保证事务调度可串行性的策略 事务排它式执行(资源无法充分共享) 两段锁(Two-Phase Locking, 2PL)协议 其它,如时间戳(TimeStamp)方法
文档评论(0)