事务并发控制_第1页
事务并发控制_第2页
事务并发控制_第3页
事务并发控制_第4页
事务并发控制_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主讲教师:魏巍巍北京信息职业技术学院数据库技术与应用事务并发控制创建采集任务01并发带来的问题封锁技术0102目录CONTENTS并发带来的问题01DBMS为了有效的利用计算机的硬件资源和数据库中的数据,允许多个事务并发执行,但事务的并发执行可能出现诸如丢失修改、读脏数据、不可重复读问题,使数据库处于不一致性的状态。为了防止并发执行产生的问题,DBMS需要具备并发控制的功能。并发控制常用的方法有封锁法、时间印法和乐观控制法,商用的DBMS一般都采用封锁法。并发控制由DBMS中的调度器来完成,调度器和事务管理器以及存储子系统协同完成并发控制,如图1所示。并发带来的问题READ(X),WRITE(X)LOCK(X),READ(X),WRITE(X),UNLOCK(X)READ(X),WRITE(X),COMMIT(T),ABORT(T)事务管理器调度器第一部分DB调度器第二部分锁表图1并发控制并发带来的问题并发带来的问题不施加任何限制的调度会使数据库处于不一致性状态,因此必须对用户的操作实行某种限制,使得系统能既处理更多的事务,同时又保证数据库处于一致性状态。显然,串行调度是正确的,执行结果等价于串行调度的调度也是正确的,这样的调度叫做可串行化调度。并发带来的问题[例]假设有两个学生同时运行图5.1的事务,分别用T1和T2表示。图1的事务用底层操作可以表示为:W(A)R(B)W(B)W(A)表示向SC表插入一个元组,R(B)和W(B)表示读、写Course表的Limit列,因为一个UPDATE语句首先要读出Limit上的值,然后才能做加1运算,所以,UPDATE语句要使用两个底层操作。并发带来的问题并发执行一:在t1、t2和t3时刻学生甲的事务的三个操作被送到DBMS的存取层,并立刻获得执行,在t4、t5和t6时刻执行学生乙的三个操作,执行的结果和我们预期的结果完全相同,如右图所示。两个事务的执行是实际上是串行执行,先执行完T1,再执行T2。开始时Limit=80

时刻T1

T2

t1

W(A)t2R(Limit=80)t3W(Limit=79)t4W(A)t5R(Limit=79)t6W(Limit=78)结束时Limit=78并发带来的问题并发执行二 如右图所示,T1和T2的操作穿插执行,结果是T1的修改操作没有起到应有的作用,这种现象称为“丢失修改”。开始时Limit=80

时刻T1

T2

t1

W(A)t2R(Limit=80)t3W(A)t4R(Limit=80)t5W(Limit=79)t6W(Limit=79)结束时Limit=79并发带来的问题并发执行三:学生甲执行事务T1,但是在确认是否真正选修课程时,他放弃了选修,事务被回滚。具体的执行过程如右图所示,学生乙的选课操作也没有获得成功,原因是在T1没有结束时,就读了Limit,这种现象叫做“读脏数据”。开始时Limit=1

时刻T1

T2

t1

W(A)t2R(Limit=1)t3W(A)t4R(Limit=1)t5W(Limit=0)t6W(Limit=0)t7RollBack

结束时Limit=0并发带来的问题并发执行四: T1在执行过程中读了两次Limit,但是发现Limit的两次余额不一样,由于不知道发生了什么情况而将T1撤消了。原因是在两个读操作中间执行了另外的事务T2,这种现象叫做“不可重复读”。开始时Limit=1时刻T1

T2

t1

W(A)t2R(Limit=1)t3W(Limit=0)t4W(A)t5R(Limit=0)t6RollBackt7RollBack结束时Limit=1并发带来的问题[例]如图所示,T1和T2交叉执行,不是串行调度,但是结果确与串行执行事务的结果相同,因此,是一个可串行化调度,是正确的调度。开始时Limit=80

时刻T1

T2

t1

W(A)t2R(Limit=80)t3W(A)t4W(Limit=79)t5R(Limit=79)t6W(Limit=78)结束时Limit=78并发带来的问题封锁技术02S锁和X锁

S锁又被称为共享锁(ShareLocks),X锁又被叫做排它锁(eXclusiveLocks)。共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。封锁技术排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能读取和修改A。T2

T1XSXNNYSNYYYYY封锁类型的相容矩阵Y=Yes,相容的请求N=No,不相容的请求封锁技术一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可防止丢失修改,并保证事务T是可恢复的,但它不能保证可重复读和不读“脏”数据。封锁技术二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据,由于读完数据后即可释放S锁,所以它不能保证可重复读。封锁技术三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。封锁技术两段封锁协议的大体内容有以下4条:1、在事务T的R(A)操作之前,先对A加S锁,如果加锁成功,则执行操作R(A),否则,将R(A)加入A的等待队列。2、在事务T的W(A)操作之前,先对A加X锁,如果加锁成功,则执行操作W(A),否则,将W(A)加入A的等待队列。封锁技术3、在收到事务的Abort或Commit请求后,释放T在每个数据上所加的锁,如果在数据A的等待队列中不空,即有其它的事务等待对A进行操作,则从队列中取出第一个操作,完成加锁,然后执行该操作。4、执行Abor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论