ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:20.26KB ,
资源ID:13954236      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13954236.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据库 第八章并发控制.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据库 第八章并发控制.docx

1、数据库 第八章 并发控制数据库 第八章 并发控制 并发控制 习题 1在数据库中为什么要并发控制? 2并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 3什么是封锁? 4基本的封锁类型有几种?试述他们的含义。 5如何用封锁机制保证数据的一致性? 6什么是封锁协议?不同级别的封锁协议的主要区别是什么? 7不同封锁协议与系统一致性级别的关系是什么? 8什么是活锁?什么是死锁? 9试述活锁的产生原因和解决方法。 10请给出预防死锁的若干方法。 11请给出预测死锁发生的一种方法,当发生死锁后如何接触死锁? 12什么样的并发调度是正确的调度? 13设T1,T2,T3是如下3个事务:

2、T1:A:=A+2; T2:A:=A*2; T3:A:= A*2;(A?A2) 设A的初值为0。 若这3个事务允许并行执行,则有多少可能的正确结果,请一一列举出来。 请给出一个可串行化的调度,并给出执行结果。 请给出一个非串行化的调度,并给出执行结果。 若这3个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。 若这3个事务都遵守两段锁协议,请给出一个产生死锁的调度。 14试述两段锁协议的概念。 15试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的 16举例说明,对并发事务的一个调度是可串行化的,而这些事务不一定遵守两段锁协议。 17为什么要引进意向锁?意向锁的含义

3、是什么? 18试述常用的意向锁:IS锁、IX锁、SIX锁,给出这些锁的相容矩阵。 19理解并解释下列术语的含义:封锁、活锁、死锁、排他锁、共享锁、并发事务的调度、可串行化的调度、两段锁协议。 *20试述你了解的某一个实际的DBMS产品的并发控制机制。 参考答案 1答:数据库是共享资源,通常有许多个事务同时在运行。 当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。 2答:并发操作带来的数据不一致性包括三类:丢失修改,不可重复读和读“脏”数据。 (1) 丢失修改(L

4、ost Update) 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2) 不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。不可以重复读包括三种情况:详见8。1(P266) (3) 读“脏” 数据(Dirty Read) 读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据 ,即不正确的数据。

5、 避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 答:封锁就是事务T在对某个数据对象例如表。记录等操作之前,先向系统发出请求。对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术。 4答:基本的封锁类型有两种:排它锁(Exclusive Locks,简称 X锁)和共享锁 。 排它锁又成为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保

6、证了其他事务在T释放A上的锁之前不能再读取和修改A。 共享锁又称为读锁。若事务Td对数据对象A加上s锁,则事务T可以读取A但不能修改A,其他事务只能再对A加S锁。而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 5答:DBMS在对数据进行读,写操作之前首先对该数据执行封锁操作,例如下图中事务T1在对A进行修改之前先对A执行Xock(A),即对A加X锁。这样,当T2请求对A加X锁时就被拒绝,T2只能等待T1释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后的值,再按此新的A值进行运算。这样就不会丢失T1的更新。 T1 1 Xl

7、ock A 2 获得 读A16 3 AA-1 写回 A=15 Commit Unlock A 4 5Xlock A 等待 等待 等待 等待 获得Xlock A A=A-1 写回 A14 A15 T2 Commit Unlock A DBMS按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改,不可重复读和读脏数据等数据不一致性 6答:在运用封锁技术对数据加锁时,要约定一些规则。例如,在运用X锁和S锁对数据对象加锁时,要约定何时申请X锁或S锁,何时释放封锁等。这些约定或者规则称为封锁协议(Locking Protocol)。对封锁方式约定不同的规则,就形成了各种

8、不同的封锁协议,不同级别的封锁协议。例如8。3中介绍的三级封锁协议,三级 封锁协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁 一级封锁协议:事务T在 修改数据R之前必须先对其加X锁,直到事务结束才释放。 二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 7答:不同的封锁协议对应不同的一致性级别。 一级封锁协议可防止丢失修改,并保证事务T可恢复的。在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读“脏”数据。 二级封锁协议除防

9、止了丢失修改,还可进一步防止“脏”脏数据。在二级封锁协议中,S锁,所以它不能保证可重复读。 在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。 下面的表格清楚地说明了封锁协议与系统一致性的关系。 X锁S锁 一致性保证 操作结束释放 一级封锁协议 二级封锁协议 三级封锁协议 事务结束释放 操作结束释放 事务结束释放 不丢失修改 不读“脏”数据 可重复读 8答 T1 Lock R 。 。 Unlock。 。 。 。 。 T2 。 lock R 等待 等待 等待 等待 等待 等待 等待 T3

10、。 。 Lock R 。 Lock R 。 Lock R 。 。 T4 。 。 。 Lock R 等待 等待 等待Lock R 。 如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2人仍然等待。 后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求 T2有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。 如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因为已封锁了R2,于是T1等待t2释放r2上的锁。接着T2又申请封锁

11、R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。 T1 Lock R1。 Lock R2 等待 等待 等待 T2 。 Lock R2 。 。 。 Lock R1 等待 9答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求的先后顺序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。 答: 在数据中,产生死锁的原因是两个或

12、多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死锁等待。 防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法。 一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能执行; 顺序封锁法,预先对数据对象规定一个封锁的顺序,所有事务都按这个顺序实行封锁。 不过,预防死锁的策略不大适合数据库系统的特点,具体原因可参考概论。 11答: 数据库系统一般采用允许死锁发生,DBMS检测死锁后加以解除的方法。 DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。 超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死

13、锁 。超时实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。 DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的使用锁,使其他事务得以继续运行下去。当然,对撤消的事务所执行的数据修改操作必须、加以恢复。 12答:可串性化的调度是正确的调度。 可串性化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某 一次串行执行它们时的结果相同,称这种调度策略为可串行化的调度。 13答T1 Slock A Y=A=0 UnLock A Xlock

14、 A A=Y+2 写回A(=2) Unlock A T2Slock A 等待 等待 等待 Y=A=2 Unlock A Xlock A A=Y+2 写回A(=4) UnLock A T3Slock A 等待 等待 等待 Y=A=4 Unlock A Xlock A A=Y*2 写回A(=16) UnLock A T1 T2T3 Slock A Y=A=0 UnLock AXlock A 等待 A=Y+2 写回 A(=2) UnLock ASlock A Y=A=0 UnLock AXlock A 等待 等待 等待 A=Y*2 写回A(=0)Slock A 等待 Y=A=2 UnLock A X

15、lock A Y=Y*2 写回A(=4) UnLock A Unlock A 最后结果A为0,为非串行化的调度。 答T1 Slock A Y=A=0 Xlock A A=Y+2 写回A(=2) UnLock AT2Slock A 等待 等待 Y=A+2 Xlock A 等待 A=Y*2 写回A(=4) UnLock A UnLock AT3 Slock A 等待 等待 等待 Y=A=4 Xlock A A=Y*2 写回A(=16) UnLock A UnLock A T1Slock AY=A=0T2T3 Xlock A等待 Slock A Y=A=0 Xlock A 等待Slock A Y=A

16、=0 Xlock A 等待14答:两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。 在对任何数据进行读,写操作之前,首先要申请并获得对该数据的封锁; 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 两段的含义是,事务分为两个阶段: 第一个阶段是获得封锁,也称为扩展段,在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁; 第二阶段是释放封锁,也称为收缩阶段,在这阶段,事务释放已经获得的但是不能在申请任何锁。 15证明: 首先以两个并发事务T1和T为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化可能发生在下列两种情况: 事务T1写某个

17、数据对象A,T2读或写A; 事务T1读或写某个数据对象A,T2写A 下面称A 为潜在冲突对象。 设T1 和T2 访问的潜在冲突的公共对象为A1, A2, A3,An。 不失一般性,假设这组潜在冲突对象中X=A1, A2,Ai均符合情况。 Y= Ai+1, An符合所情况(2) ?xX,T1 需要Xlock x T2 需要Slock x 或Xlock x 1) 如果操作先执行,则T1获得锁,T2等待 于遵守两段锁协议,T1在成功获得X和Y中全部对象及非潜在冲突对象的锁后,才会释放锁。 这时如果?wX或Y,T2已获得w 的锁,则出现死锁; 否则,T1在对X,Y中的对象全部处理完毕后,T2才能执行。

18、 这相当于按T1,T2的顺序串行执行,根据可串行化定义,T1和T2的调度是可串行化的。 16答: T1 T2 Slock B 读 B=2 Y=B UnLock B Xlock ASlock A A=Y+1 写回 A=3 UnLock A 等待 等待 等待 等待 Slock A 读A=3 X=A UnLock A Xlock B B=X+1 写回B=4 UnLock B 17答:引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。 原因是:在多粒度封锁方法中一个数据对象可能以良种方式加锁-显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封

19、锁与之冲突 ,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突,显然,这样的检查方法效率很低。为此引进了意向锁。 意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。 例如事务T要对某个元组加X锁,则首先要对关系和数据库加IX锁。换言之,对关系和数据库加IX锁,表示它的后裔结点-某个元组拟加X锁。 引进意向锁后,系统对某一数据对象加锁不必逐个检查与下一级结点的封锁冲突了。例如,事务T要对关系R加X锁,系统只要检查根结点数据库和R本身是否已加了不相容的锁,而不再需要搜索和检查R中的每一个元组是否加了X锁或是S锁。 18答:IS锁 如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对关系和数据库加IX锁。 IX锁 如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对关系和数据库加IX锁。 SIX锁 如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IXT0 T1 S X IS IX Y N Y N N N N N N Y Y N Y Y Y Y N N Y Y N Y N N Y N N Y Y Y Y Y Y Y S X IS IX SIX - SIX N - Y 19答:。 20答:。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2