并发调度的可串行性.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

四、封锁带来的问题--活锁和死锁4、死锁的检测与解除有向等待图中的每个回路意味着死锁的存在;如果无任何回路,则表示无死锁产生。并发控制子系统周期性地(比如每隔0.5分钟)检测事务的有向等待图,如果发现有向等待图中存在回路,就表示系统中出现了死锁。②解除死锁:DBMS的并发控制子系统检测到死锁后,选择一个处理死锁代价最小的事务,将其撤消,释放它持有的所有锁。五、并发调度的可串行性1、事务的调度调度:按某一执行次序安排的事务执行的步骤。串行调度:多个事务依次执行。并发调度:利用分时方法同时处理多个事务。五、并发调度的可串行性2、可串行化调度多个事务的并发执行是正确的,当且仅当其结果与按某一顺序串行地执行它们时的结果相同,称这种调度为可串行化调度。**数据库是一个可以供多个用户共同使用的共享资源。多个事务可以对同一数据同时进行操作,即“并发操作”。问题是:可能会破坏数据库的完整性。怎么办呢?控制多个用户如何同时访问和更改共享数据而不会彼此冲突的方法称为并发控制。10.5并发控制第10章数据库保护技术主要内容锁2锁协议3并发操作带来的数据不一致问题1封锁带来的问题:活锁和死锁4并发调度的可串行性5两段锁协议6锁的粒度7一、数据库并发操作带来的数据不一致问题例10.11在一个飞机订票系统中,可能会出现下列的一些业务活动序列。(1)甲售票点读航班X的机票余额数为A=25。(2)紧接着,乙售票点读同一航班X的机票余额数为A=25。(3)甲售票点卖出一张机票,修改机票余额数A=A-1为24,并把A写回数据库。(4)乙售票点也卖出一张票,同样修改机票数A=A-1为24,并把A写回数据库。实际卖了2张票,但余额数只减少1张!一、数据库并发操作带来的数据不一致问题时间T1事务T2事务DB中的A值t025t1read(A)t2read(A)t3A:=A-1t4write(A)t524t6A:=A-1t7write(A)t824丢失修改一、数据库并发操作带来的数据不一致问题时间T1事务T2事务DB中的A值t025t1read(A)t2read(A)t3A:=A-10t4write(A)t515读过时数据一、数据库并发操作带来的数据不一致问题时间T1事务T2事务DB中的A值t025t1read(A)t2A:=A-10t3write(A)t4read(A)15t5ROLLBACKt625读“脏”数据一、数据库并发操作带来的数据不一致问题产生原因:并发操作破坏了事务的隔离性。并发控制就是通过正确的调度方式,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。并发控制的主要技术就是“锁”。二、锁数据库系统进行并发控制的基本方法是对被操作的数据所在项进行加锁。项是数据库中能被加锁的数据单位,可以是表中某几个字段,也可以是表中若干记录,或者是某个表,甚至是整个数据库。锁是防止存取同一资源的用户之间出现不正确地修改数据或不正确地更改数据结构的一种机制。二、锁1、排他锁(X锁)当某个事务T为修改某个数据项A且不允许其它事务修改该数据项,或不允许其它事务对该数据项加S锁时,则该事务可以对A加排他锁,排他锁又称为写锁。本事务:读A,修改A;其它事务:不能读A,不能修改A。二、锁例:加排他锁情况。在SQLServer中,新建两个连接,分别执行以下语句:USEJXGLBEGINTRANSACTIONT1UPDATES1SETsname=aaaaWHERES#=200401001WAITFORdelay00:00:30--等待30秒COMMITTRANSACTIONT1USEJXGLBEGINTRANSACTIONT2SELECT*FROMS1WHERES#=200401001;COMMITTRANSACTIONT2若同时执行以下两个语句,则第二个SELECT查询要等待30秒,即等待UPDATE语句(系统为它自动加了排他锁)执行完毕,才能执行。二、锁2、共享锁(S锁) 当某个事务T希望阻止其它事务修改正为它读取的某个数据项A时,则该事务可以对A加共享锁,共享锁又称为读锁。本事务:读A,不能修改A;其它事务:可以读A,不能修改A。例:

文档评论(0)

hongbing2021 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档