收藏 分享(赏)

第七章-第5节-并发控制.ppt

上传人:weiwoduzun 文档编号:5673651 上传时间:2019-03-11 格式:PPT 页数:37 大小:500.50KB
下载 相关 举报
第七章-第5节-并发控制.ppt_第1页
第1页 / 共37页
第七章-第5节-并发控制.ppt_第2页
第2页 / 共37页
第七章-第5节-并发控制.ppt_第3页
第3页 / 共37页
第七章-第5节-并发控制.ppt_第4页
第4页 / 共37页
第七章-第5节-并发控制.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、1,7.5 并发控制,第7章 数据库保护技术,2,主要内容,数据库并发操作带来的数据不一致问题 锁 锁协议 封锁带来的问题:活锁和死锁 并发操作的调度,3,并发控制,数据库是一个可以供多个用户共同使用的共享资源。 串行访问,每个时刻只能有一个用户应用程序对数据库进行存取,其它用户程序必须等待。 缺点:制约数据库访问效率的瓶颈,不利于数据库资源的利用。 并行访问,通过并发控制机制允许多个用户并发地访问数据库。,4,并发控制,当多个用户并发地访问数据库时就会产生多个事务同时存取同一数据的情况。 若对并发操作不加以控制就会造成错误地存取数据,破坏数据库的一致性。 数据库的并发控制机制是衡量数据库管理

2、系统性能的重要技术标志。,5,7.5.1 DB并发操作带来的数据不一致问题,例7.16 在一个飞机订票系统中,可能会出现的业务:(1)甲售票点读航班X的机票余额数为A=25;(2)紧接着,乙售票点读同一航班X的机票余额数A=25;(3)甲售票点卖出一张机票,然后修改机票余额数A=A-1为24,并把A写回数据库;(4)乙售票点也卖出一张机票,同样接着修改机票余额数A=A-1为24,并把A写回数据库。 设甲售票点对应于事务T1,乙售票点对应于事务T2,则上述事务过程的描述如图,6,丢失修改,(1)丢失修改,7,读过时数据,(2)读过时数据,8,读“脏”数据,(3)读“脏”数据,9,DB并发操作带来

3、的三类数据不一致问题,并发操作可能带来的数据不一致性情况有三种 (1)丢失修改 (2)读过时数据 (3)读“脏”数据,10,产生原因:并发操作破坏了事务的隔离性,并发控制就是要通过正确的调度方式,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。,DB并发操作带来的三类数据不一致问题,11,7.5.2 锁,定义 锁是防止存取同一资源的用户之间出现不正确地修改数据或不正确地更改数据结构的一种机制。 基本的锁方式有二种: 排它锁(Exclusive Locks ,简记为X锁) 共享锁(Share Locks ,简记为S锁),12,(1)排它锁(X锁),当某个事务T为修改某个数据项

4、A且不允许其它事务修改该数据项,或不允许其它事务对该数据项加S锁时,则该事务可以对A加排它锁,排它锁又称为写锁。 本事务:读A,修改A 其它事务:在T释放A上的X锁之前不能读A和修改A,13,(2)共享锁(S锁),当某个事务T希望阻止其它事务修改正为它读取的某个数据项A时,则该事务可以对A加共享锁,共享锁又称为读锁。本事务:读A,不能修改A其它事务:加S锁读A,在T释放A上S锁之前不能修改A,14,S锁和X锁的共存相容矩阵,15,7.5.3 锁协议,当一个事务T要对某个项加锁时,还必须遵守某种规则,比如在什么条件下可以申请S锁或X锁,持锁时间如何确定、何时释放锁等。一般称这些规则为锁协议(Lo

5、cking Protocol)。 对加锁方式规定不同的规则,就形成了不同的锁协议。 不正确的并发操作可能带来的丢失修改、读过时数据和读“脏”数据等不一致性问题,三级锁协议在不同程度上可以解决这些问题。,16,(1)一级锁协议,事务T在修改数据R之前必须先对数据R所在的项申请加X锁,在获得了X加锁后,直到该事务T结束时才释放所加的X锁。 如果未获准加X锁,则该事务T进入等待状态,直到获准X加锁后该事务才继续执行。,17,(1)一级锁协议,本事务:读R,修改R;用COMMIT和ROLLBACK释放X锁其它事务:在T结束前不能读R,也不能修改R作用:防止丢失修改,18,(2)二级锁协议,二级锁协议除

6、包括一级锁协议的内容外,还包括如下规则: 事务T在读数据R之前必须先对数据R所在的项申请加S锁,在获得了S加锁后,读完数据R后即可释放所加的S锁。 如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行。,19,(2)二级锁协议,一级锁协议本事务:读R,不能修改R ;用UNLOCK 释放S锁(不需等T结束)其它事务:可加S锁读R,不能修改R作用:防止丢失修改,防止读“脏”数据,20,(3)三级锁协议,三级锁协议除包括一级锁协议的内容外,还包括如下规则 : 事务T在读数据R之前必须先对数据R所在的项申请加S锁,在获得了S加锁后,直到该事务T结束时才释放所加的S锁。 如果未获准

7、加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行 。,21,(3)三级锁协议,一级锁协议本事务:读R,不能修改R;用COMMIT和ROLLBACK释放其它事务:可加S锁读R,不能修改R作用:防止丢失修改,防止读“脏”数据,防止读过时数据,22,7.5.4 封锁带来的问题(1)活锁,如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放了R上的封锁之后,系统首先批准了T3的请求,T2仍然等待,然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求,T2继续等待,如此下去,T2有可能永远等待。 这种可能存在某个事务永远处于等待状

8、态、得不到封锁的机会的现象,称为活锁。 解决方法:先来者先执行。,23,(2)死锁,两个或两个以上的事务都处于等待状态,每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果任何一个事务都无法继续执行,这种现象称为死锁。,24,(3)死锁的预防(OS),一次加锁法 要求每个事务必须对所有要使用的数据项一次性地全部加锁,否则就不能继续执行。 缺点:扩大了锁的范围,降低了系统的并发度。,25,(3)死锁的预防(OS),顺序加锁法 预先对数据项规定一个加锁顺序,所有事务都按这个顺序进行加锁。 缺点:很难按规定的顺序进行加锁。,26,(4)死锁的检测与解除,1)超时法 如果一个事务的等待时间

9、超过了规定的时限,就认为发生了死锁。 优点:实现简单 缺点: 有可能误判死锁 若时限设置的太长,可能出现死锁发生后不能及时发现的情况。,27,(4)死锁的检测与解除,2)有向等待图法 检测死锁 画一个表示事务等待关系的有向等待图G=(V,E)。V为结点集合,结点表示一个正在运行的事务;E为有向边集合,有向边表示事务的等待关系。 若T1正在等待给被T2锁住的数据项加锁,则在T1和T2之间划一条有向边,方向是T1指向T2。事务的有向等待图动态地反映了所有事务的等待情况。,28,(4)死锁的检测与解除,有向等待图中的每个回路意味着死锁的存在;如果无任何回路,则表示无死锁产生。 并发控制子系统周期性地

10、(比如每隔0.5分钟)检测事务的有向等待图,如果发现有向等待图中存在回路,就表示系统中出现了死锁。,29,(4)死锁的检测与解除,2)有向等待图法 检测死锁 解除死锁 选择一个处理死锁代价最小的事务,将其撤消,释放它持有的所有锁。,30,7.5.5 并发调度的可串行性,通常情况下,如果一个事务在执行过程中没有与其它事务并发运行,也就是说该事务的执行没有受到其它事务干扰时,就认为该事务的运行结果是正常的或者是预想的。 也就是说,当多个事务串行执行时,各事务的运行结果一定是正确的。 因此,仅当几个事务的并发运行结果与这些事务按某一次序串行运行的结果相同时,这样的并发操作才是正确的。,31,7.5.

11、5 并发调度的可串行性,通常把按某一执行次序安排的事务执行的步骤称为调度(Schedule)。 多个事务的并发执行是正确的,当且仅当其结果与按某一顺序串行地执行它们时的结果相同。称这种调度称为可串行化(Serializable)调度。 可串行性(Serializability)是并发事务正确性的判别准则。按照这个准则的规定,一个给定的并发调度,当且仅当它可串行化时,才认为是正确的调度。,32,7.5.5 并发调度的可串行性,示例 事务T1:从账号A将数量为100的款项转到账号B; 事务T2:从账号B将20的款项转到账号C。 假设A、B和C的初值分别为600、300和100。,33,正确的并发调

12、度,34,正确的.vs.错误的并发调度,35,7.5.6 两段锁协议,DBMS普遍采用加锁方法实现并发操作调度的可串行性,从而保证调度的正确性。 两段锁(Two-Phase Locking,简称2PL)协议就是保证并发调度可串行性的锁协议。 规则 在每一个事务中,所有的加锁语句都在解锁语句之前。,36,7.5.6 两段锁协议,加锁段(扩展阶段):事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。 解锁段(收缩阶段):事务可以释放任何数据项上的任何类型的琐,但是不能再申请任何琐。,37,7.5.6 两段锁协议,两段锁协议和可串行化调度 若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的(充分条件,不是必要条件)两段锁协议和一次加锁法 一次加锁法遵守两段锁协议; 遵守两段锁协议的事务并不遵守一次加锁法。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报