数据库系统第章.ppt
文本预览下载声明
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)方法
显示全部