版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章
事务与并发控制
数据库原理与应用1本章内容10.1事务10.2并发控制210.1事务10.1.1事务的基本概念10.1.2事务的特征10.1.3事务处理模型310.1.1事务的基本概念事务(transaction)是用户定义的数据操作系列,这些操作作为一个完整的工作单元执行。一个事务内的所有语句作为一个整体,要么全部执行,要么全部不执行。4举例例如,A账户转账给B账户n元钱,这个业务活动包含如下两个操作:
第一个操作:A账户−n
第二个操作:B账户+n假设第一个操作成功了,但第二个操作由于某种原因没有成功(比如突然停电等)。那么在系统恢复正常运行后,A账户的金额是减n之前的值还是减n之后的值呢?5举例(续)如果B账户的金额没有变化(没有加上n),则正确的情况是A账户的金额应该是没有做减n操作之前的值(如果A账户是减n之后的值,则A账户中的金额和B账户中的金额就对不上了,这显然是不正确的)。怎样保证在系统恢复之后,A账户中的金额是减n前的值呢?这就需要用到事务的概念。6事务基本概念事务可以保证在一个事务中的全部操作或者全部成功,或者全部失败。当第二个操作没有成功完成时,系统自动撤销第一个操作,使第一个操作不做。这样当系统恢复正常时,A账户和B账户中的数值就是正确的。必须显式地告诉数据库管理系统哪些操作属于一个事务,这可以通过标记事务的开始与结束来实现。7事务的开始和结束不同的事务处理模型,事务的开始标记不完全一样,但事务的结束标记都是一样的。事务的结束标记有两个:正常结束,COMMIT,表示提交,即事务中的所有操作都会物理地保存到数据库中,成为永久操作;异常结束,ROLLBACK,表示回滚,即事务中的全部操作被撤销,数据回到事务开始之前的状态。810.1.2事务的特征事务有四个特征,即原子性(atomicity)一致性(consistency)隔离性(isolation)持久性(durability)这4个特征也简称为事务的ACID特征。9原子性事务的原子性是指事务是数据库的逻辑工作单位,事务中的操作,要么都做,要么都不做。10一致性事务的一致性是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。当事务成功提交时,数据库就从事务开始前的一致性状态转到了事务结束后的一致性状态。11隔离性事务的隔离性是指数据库中一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行的各个事务不能相互干扰。12持久性事务的持久性也称为永久性(permanence),指事务一旦提交,则其对数据库中数据的改变就是永久的,以后的操作或故障不会对事务的操作结果产生任何影响。13说明事务是数据库并发控制和恢复的基本单位。保证事务的ACID特性是事务处理的重要任务。事务的ACID特性可能遭到破坏的因素有:多个事务并行运行时,不同事务的操作有交叉情况。数据库管理系统必须保证多个事务在交叉运行时不影响这些事务的原子性。事务在运行过程中被强迫停止。数据库管理系统必须保证被强迫终止的事务对数据库和其他事务没有任何影响。1410.1.3事务处理模型事务有两种类型:显式事务隐式事务显式事务是有显式的开始和结束标记的事务。隐式事务是指每一条数据操作语句都自动地成为一个事务。15MySQL的事务标记事务的开始标记是:
STARTTRANSACTION;事务的结束标记有如下两个:COMMIT;
#正常结束ROLLBACK;
#异常结束16转账示例STARTTRANSACTION;UPDATE支付表SET账户总额=账户总额-nWHERE账户号='A'UPDATE支付表SET账户总额=账户总额+nWHERE账户号='B'COMMIT;17本章内容10.1事务10.2并发控制1810.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议1910.2并发控制数据库系统一个明显的特点是多个用户共享数据库资源,尤其是多用户可以同时存取相同数据,在这样的系统中,在同一时刻同时运行的事务可达数百个。当系统中同时有多个事务在运行时,特别是当这些事务是对同一段数据进行操作时,彼此之间就有可能产生相互干扰的情况。20串行执行如果事务是顺序执行的,即一个事务完成之后,再开始另一个事务,则称这种执行方式为串行执行。21交叉并行执行如果数据库管理系统可以同时接受多个事务,并且这些事务在时间上可以重叠执行,则称这种执行式为并发执行。22交叉并发与同时并发在单CPU系统中,同一时间只能有一个事务占据CPU,各个事务交叉地使用CPU,这种并发方式称为交叉并发。在多CPU系统中,多个事务可以同时占有CPU,这种并发方式称为同时并发。主要讨论单CPU中的交叉并发的情况。2310.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议2410.2.1并发控制概述设有订票业务:①A订票点(事务A)读出航班目前的机票余额数,假设为10张;②B订票点(事务B)读出航班目前的机票余额数,也为10张;③A订票点订出6张机票,修改机票余额为10-6=4,并将4写回到数据库中;④B订票点订出5张机票,修改机票余额为10-5=5,并将5写回到数据库中。这两个事务不能反映出飞机票数不够的情况,而且B事务还覆盖了A事务对数据的修改,使数据库中的数据不正确。25数据不一致情况数据库管理系统必须想办法避免出现数据不正确(不一致)情况,这是数据库管理系统在并发控制中要解决的问题。并发操作所带来的数据不一致情况大致可以概括为四种:丢失数据修改、读“脏”数据、不可重复读和产生“幽灵”数据。261.丢失数据修改时间事务T1事务T2t1读A=16t2读A=16t3修改A=A–1=15写回A=15t4修改A=A–4=12写回A=12(覆盖了T1对A的修改)272.读“脏”数据28时间事务T1事务T2t1读B=100修改B=B*2=200写回B=200t2读B=200(读入T1的“脏数据”)t3ROLLBACKB恢复为1003.不可重复读时间事务T1事务T2t1读A=50读B=100计算A+B=150t2读B=100修改B=B*2=200写回B=200t3读A=50读B=200计算A+B=250(与前一次统计的值不同)294.产生“幽灵”数据产生“幽灵”数据实际属于不可重复读的范畴。当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中的部分记录,或在其中添加了部分记录,则当T1再次按相同条件读取数据时,发现其中莫名其妙地少了(删除)或多了(插入)一些记录。这样的数据对T1来说就是“幽灵”数据或称“幻影”数据。3010.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议3110.2.2并发控制措施进行并发控制的主要方式是使用封锁机制,即加锁(locking)。加锁是一种并行控制技术,用来调整对共享目标(如数据库中共享记录)的并行存取。事务通过向封锁管理程序的系统组成部分发出请求而对记录加锁。32以飞机订票系统为例当事务T要修改订票数时,在读取订票数之前先封锁该数据,然后再对数据进行读取和修改操作。这时其他事务就不能读取和修改订票数,直到事务T修改完成并将数据写回到数据库,并解除对该数据的封锁之后才能由其他事务使用这些数据。33加锁加锁就是限制事务内和事务外对数据的操作。加锁是实现并发控制的一个非常重要的技术。加锁就是事务T在对某个数据操作之前,先向系统发出请求,封锁其所要使用的数据。加锁后事务T对其要操作的数据具有了一定的控制权,在事务T释放它的锁之前,其他事务不能操作这些数据。34锁的类型基本的锁类型有两种:排他锁(exclusivelock,也称为X锁或写所)共享锁(sharelock,也称S锁或读锁)。35共享锁若事务T给数据对象A加了S锁,则事务T可以读A,但不能修改A,其他事务可以再给A加S锁,但不能加X锁,直到T释放了A上的S锁为止。即对于读操作(检索)来说,可以有多个事务同时获得共享锁,但阻止其他事务对已获得共享锁的数据进行排他封锁。36排他锁若事务T给数据对象A加了X锁,则允许T读取和修改A,但不允许其他事务再给A加任何类型的锁和进行任何操作。即一旦一个事务获得了对某一数据的排他锁,则任何其他事务均不能对该数据进行任何封锁,其他事务只能进入等待状态,直到第一个事务撤销了对该数据的封锁。37加锁类型的相容矩阵3810.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议3910.2.3封锁协议在运用X锁和S锁给数据对象加锁时,还需要约定一些规则,如何时申请X锁或S锁、持锁时间、何时释放锁等,称这些规则为封锁协议或加锁协议(lockingprotocel)。对封锁方式规定不同的规则,就形成了各种不同级别的封锁协议。40一级封锁协议对事务T要修改的数据加X锁,直到事务结束(包括正常结束和非正常结束)时才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。但不能保证可重复读和不读“脏”数据。41没有丢失修改示例事务T1时间事务T2请求对A加X锁,获得t1
读A=16t2
t3请求对A加X锁,等待修改
A=A-1=15写回A=15t4等待释放A的X锁t5等待
t6获得A的X锁
t7读A=15
t8修改
A=A-4=11写回A=11
t9释放A的X锁42二级封锁协议一级封锁协议加上事务T对要读取的数据加S锁,读完后即释放S锁。二级封锁协议除了可以防止丢失修改外,还可以防止读“脏”数据。但不能保证可重复读数据。43不读“脏”数据示例事务T1时间事务T2请求对C加X锁,获得t1
读C=50t2
修改C=C*2=100写回C=100t3
t4请求对C加S锁,等待撤销,恢复C为50t5等待释放C的X锁t6等待
t7获得C的S锁
t8读C=50
t9释放C的S锁44三级封锁协议一级封锁协议加上事务T对要读取的数据加S锁,并直到事务结束才释放。三级封锁协议除了可以防止丢失数据修改和不读“脏”数据之外,还进一步防止了不可重复读。45可重复读示例事务T1时间事务T2请求对A、B分别加S锁,获得t1
读A=50,B=100计算A+B=150t2
t3请求对B加X锁,等待读A=50,B=100计算A+B=150t4等待将计算结果写回数据库t5等待释放A的S锁,释放B的S锁t6等待
t7获得B的X锁
t8读B=100
t9修改B=B*2=200写回B=200
t10释放B的X锁46各级封锁协议区别封锁协议X锁(对写数据)S锁(对读数据)不丢失修改(写)不读脏数据(读)可重复读(读)一级事务全程加锁不加√二级事务全程加锁事务开始加锁,读完即释放锁√√三级事务全程加锁事务全程加锁√√√4710.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议4810.2.4活锁和死锁——活锁49避免活锁简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,数据库管理系统按先请求先满足的事务排队策略,当数据对象上的锁被释放后,让事务队列中第一个事务获得锁。5010.2.4活锁和死锁——死锁51解决死锁在数据库中解决死锁问题的方法主要有两类一类是采取一定的措施来预防死锁的发生,另一类是允许死锁的发生,但采用一定的手段定期诊断系统中有无死锁,若有则解除之。52预防死锁——一次封锁法每个事务一次将所有要使用的数据全部加锁,否则就不能继续执行。问题:封锁范围过大,降低了系统的并发性。由于数据库中的数据不断变化,使原来可以不加锁的数据,在执行过程中可能变成了被封锁对象,进一步扩大了封锁范围,从而更进一步降低了并发性。53预防死锁——顺序封锁法预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。问题:若封锁对象很多,则随着插入、删除等操作的不断变化,使维护这些资源的封锁顺序很困难,事务的封锁请求可随事务的执行而动态变化,因此很难事先确定每个事务的封锁数据及其封锁顺序。54死锁的诊断和解除——超时法如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。优点:实现起来比较简单。不足可能产生误判情况,比如,如果事务因某些原因造成等待时间比较长,超过了规定的等待时限,则系统会误认为发生了死锁。若时限设置的比较长,则不能对发生的死锁进行及时的处理。55死锁的诊断和解除——等待图法事务等待图是一个有向图G=(T,U)。T为结点的集合,每个结点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1和T2之间划一条有向边,从T1指向T2。56事务等待图法(a)事务T1等待T2,T2等待T1,因此产生了死锁。(b)事务T1等待T2,T2等待T3,T3等待T4,T4又等待T1,因此也产生了死锁57等待图法死锁判断事务等待图动态地反映了所有事务的等待情况。数据库管理系统中的并发控制子系统周期性地(比如每隔几秒)生成事务的等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁。5810.2并发控制10.2.1并发控制概述10.2.2并发控制措施10.2.3封锁协议10.2.4活锁和死锁10.2.5并发调度的可串行性10.2.6两段锁协议5910.2.5并发调度的可串行性数据库管理系统对并发事务中操作的调度是随机的,而不同的调度会产生不同的结果,哪个结果是正确的,哪个是不正确的?直观地说,如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,那么这个调度就一定是正确的。60进一步说明多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,就称这种调度为可串行化的调度。可串行性是并发事务正确性的准则,根据这个准则可知,一个给定的并发调度,当且仅当它是可串行化的调度时,才认为是正确的调度。61示例设有两个事务,分别包含如下操作:事务T1:读B;A=B+1;写回A;事务T2:读A;B=A+1;写回B;假设A、B的初值均为4,若按T1
→T2的顺序执行,其结果为A=5,B=6若按T2
→T1的顺序执行,其结果为A=6,B=5则当并发调度时,如果执行的结果是这两者之一,则认为都是正确的结果。62串行调度示例1T1T2对B加S锁读B=4释放B的S锁对A加X锁修改A=B+1写回A(=5)释放A的X锁对A加S锁读A=5释放A的S锁对B加X锁修改B=A+1写回B(=6)释放B的X锁63串行调度示例2T1T2对A加S锁读A=4释放A的S锁对B加X锁修改B=A+1写回B(=5)释放B的X锁对B加S锁读B=5释放B的S锁对A加X锁修改A=B+1写回A(=6)释放A的X锁64不可串行化调度示例T1T2对B加S锁读B=4对A加S锁读A=4释放B的S锁释放A的S锁对A加X锁修改A=B+1写回A(=5)对B加X锁修改B=A写回B(=5)释放A的X锁释放B的X锁65可串行化调度T1T2对B加S锁读B=4释放B的S锁A加X锁要对A加S锁修改A=B+1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 战斗机司机考试题及答案
- 2026年后疫情时代教育科技(发展)趋势展望
- 安徽省县域高中合作共享联盟2026届高三上学期1月期末质量检测数学试题(B卷)
- 河南省青桐鸣联考2026届高三上学期1月联考数学试题(解析版)
- 标准智商测量题目及答案
- 2026园长竞聘考试题及答案
- 本土实践标准
- 暴雨洪涝医疗救援物流应急响应
- 智能终端的老年友好设计
- 智能化循证文献分析工具升级深化深化深化深化深化
- 初中物理跨学科实践活动的设计与实施课题报告教学研究课题报告
- 2026广东深圳市优才人力资源有限公司招聘编外聘用人员(派遣至深圳市龙岗区机关事务管理局)补充笔试备考试题及答案详解
- 2025旅游景区质量等级评分细则
- Unit 5 Nature's Temper 单元练习题 新教材人教版八年级英语下册
- 水库库区水质富营养化治理方法及管控措施
- 2026年及未来5年市场数据中国数据标注与审核行业发展监测及市场发展潜力预测报告
- 加油站反三违工作制度
- 2026年高级钳工技能考核通关题库及参考答案详解(模拟题)
- 流行性腮腺炎诊疗指南
- 《化工企业可燃液体常压储罐区安全管理规范》(AQ3063-2025)检查表
- Unit 1 Lesson 3 Story The sun and the wind 课件(内嵌音视频) 2025-2026学年冀教版英语四年级下册
评论
0/150
提交评论