版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、事务概念 事务定义 事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位。例如银行转帐。 SQL中事务的定义事务以Begin transaction开始,以Commit work或 Rollback work结束。Commit work表示提交,事务正常结束。Rollback work表示事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态。第1页/共58页事务概念 示例银行转帐:事务T从A帐户过户50¥到B帐户。T:read(A);A := A 50;write(A);read(B);B := B + 50;write(B);read(X):从
2、数据库传送数据项X到事务的工作区中。write(X):从事务的工作区中将数据项X写回数据库。第2页/共58页事务概念 事务特性(ACID) 原子性(Atomicity)事务中包含的所有操作要么全做,要么全不做。原子性由恢复机制实现。 一致性(Consistency)事务的隔离执行必须保证数据库的一致性。事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。数据库的一致性状态由用户来负责。如银行转帐,转帐前后两个帐户金额之和应保持不变(意大利香肠)。第3页/共58页事务概念 隔离性(Isolation)系统必须保证事务不受其它并发执行事务的影响。对任何一对事务T1,T2,在
3、T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。隔离性通过并发控制机制实现。 持久性(Durability)一个事务一旦提交之后,它对数据库的影响必须是永久的。系统发生故障不能改变事务的持久性。持久性通过恢复机制实现。第4页/共58页事务状态活动状态活动状态失败状态失败状态部分部分提交状态提交状态提交状态提交状态中止状态中止状态初始状态初始状态事务无法继事务无法继续正常执行续正常执行事务回滚,数据库恢事务回滚,数据库恢复到事务开始前状态复到事务开始前状态最后一条语最后一条语句被执行后句被执行后成功完成,永成功完成,永久写入数据库久写入数据库第5页/共58页并发执行 并行
4、 Vs 串行 基本比较 并行事务会破坏数据库的一致性。 串行事务效率低。 并行的优点 一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量。 系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间。第6页/共58页并发执行 核心问题在保证一致性的前提下最大限度地提高并发度。 事务执行示例T1: read(A); A := A 50; write(A); read(B); B := B + 50; write(B);T2: read(A); temp := A0.1 A := A temp
5、; write(A); read(B); B := B + temp; write(B);从A过户50¥到B从A过户存款的10%到B开始状态:A=1000¥B=2000¥A+B=3000¥第7页/共58页并发执行 read(A); A := A 50; write(A); read(B); B := B + 50; write(B); read(A); temp := A0.1 A := A temp; write(A); read(B); B := B + temp; write(B);T1T2A=950¥B=2050¥结束状态:A=855¥B=2145¥A+B=3000¥串串行行调调度度1
6、 1第8页/共58页并发执行 read(A); A := A 50; write(A); read(B); B := B + 50; write(B); read(A); temp := A0.1 A := A temp; write(A); read(B); B := B + temp; write(B);T1T2A=900¥B=2100¥结束状态:A=850¥B=2150¥A+B=3000¥串串行行调调度度2 2第9页/共58页并发执行 事务的调度 事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序。 一组事务的调度必须保证 包含了所有事务的操作指令 一个事务中指令的顺序必须
7、保持不变。 串行调度 在串行调度中,属于同一事务的指令紧挨在一起。 对于有n个事务的事务组,可以有n!个有效调度。 并行调度 在并行调度中,来自不同事务的指令可以交叉执行。 当并行调度等价于某个串行调度时,则称它是正确的。第10页/共58页并发执行 read(A); A := A 50; write(A); read(B); B := B + temp; write(B);T1T2A=950¥B=2000¥结束状态:A=855¥B=2145¥A+B=3000¥ read(B); B := B + 50; write(B); read(A); temp := A0.1 A := A temp;
8、write(A); A=855¥B=2000¥A=855¥B=2050¥并并行行调调度度3第11页/共58页并发执行 read(A); A := A 50; B := B + temp; write(B);T1T2A=1000¥B=2000¥结束状态:A=950¥B=2100¥A+B=3050¥ write(A); read(B); B := B + 50; write(B); read(A); temp := A0.1 A := A temp; write(A); read(B); A=900¥B=2000¥A=950¥B=2000¥A=950¥B=2050¥并并行行调调度度4第12页/共5
9、8页并发执行 SQL中一致性级别的定义 serializable:一个调度的执行必须等价于一个串行调度的结果。 repeatable read:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其它事务不能对该记录进行更新。 read committed:只允许读取已提交的记录,但不要求可重复读。 read uncommitted:允许读取未提交的记录。第13页/共58页并发执行read(A);A1 := A;read(B);B1 := B;A1 + B1 = 2950;read(B);B := B + 50;write(B);T1T2A=1000¥B=2000¥read(A);
10、A := A 50;write(A); 读读脏脏数数据据第14页/共58页并发执行 read(A); A1 := AT1T2A=1000¥B=2000¥read(A);A := A 50;write(A); read(B);B := B + 50;write(B); 不不能能重重复复读读read(B);B1 := BA1+B1=3050A=950¥B=2050¥第15页/共58页并发执行select *from SCwhere CNO = C01 and SNO = S01T1T2发生幻象insert into SC values(S01, C01, null)第16页/共58页可恢复性事务的
11、恢复:一个事务失败了,应该能够撤消该事务对数据库的影响。如果有其它事务读取了失败事务写入的数据,则该事务也应该撤消。 可恢复调度read(A);write(A);T1T2read(B);commit;read(A);commit不可恢复的调度不可恢复的调度可恢复调度:可恢复调度:对于每对事务对于每对事务T1T1与与T2T2,如果如果T2T2读取了读取了T1T1所写的数所写的数据,则据,则T1T1必须先于必须先于T2T2提交提交第17页/共58页可恢复性 无级联调度read(A);read(B);write(A);T1T2read(A)write(A);级联调度:级联调度:由于一个事务故障而由于
12、一个事务故障而导致一系列事务回滚导致一系列事务回滚无级联调度:无级联调度:对于每对事务对于每对事务T1T1与与T2T2,如果如果T2T2读取了读取了T1T1所写的所写的数据,则数据,则T1T1必须在必须在T2T2读读取之前提交取之前提交T2read(A)无级联调度必是可恢复调度无级联调度必是可恢复调度第18页/共58页可串行化如何判定并行调度与一个串行调度等价? 冲突指令 指令的顺序考虑一个调度S中的两条连续指令(仅限于read与 write操作)Ii与Ij,分别属于事务Ti与Tj,Ii = read(Q), Ij = read(Q)Ii = read(Q), Ij = write(Q)Ii
13、= write(Q), Ij = read(Q);Ii = write(Q), Ij = write(Q);在 情况下,Ii与Ij的次序无关紧要。其余情况下,Ii与Ij的次序不同,其执行结果也不同,数据库最终状态也不同。第19页/共58页可串行化 冲突指令当两条指令是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时,则称这两条指令是冲突的。如在、情况下,Ii与Ij 是冲突的。非冲突指令交换次序不会影响调度的最终结果。 冲突等价如果调度S可以经过一系列非冲突指令交换转换成调度S,则称调度S与S是冲突等价的。第20页/共58页可串行化read(A);write(A);read(B
14、);write(B);T1T2read(B); write(B);并并行行调调度度3read(A);write(A);read(A);write(A);read(B);write(B);T1T2write(B);read(A);write(A);read(B);read(A);write(A);read(B);write(B);write(B);read(A);write(A);read(B);read(A);write(A);read(B);write(B);write(B);read(A);write(A);read(B);第21页/共58页可串行化 冲突可串行化当一个调度S与一个串行调度
15、冲突等价时,则称该调度是冲突可串行化的。如并行调度3是冲突可串行化的。read(A);T1T2write(A);write(A);非冲突串行化的例子:存在结果相同,但非冲突等价的调度。第22页/共58页可串行化read(A);A := A - 50write(A);T1T2冲突指令冲突指令T1T2read(B);B := B - 10write(B);read(B);B := B + 50write(B);read(A);A := A + 10write(A);read(A);A := A - 50write(A);read(B);B := B + 50write(B);read(B);B :
16、= B - 10write(B);read(A);A := A + 10write(A);A=950¥B=2000¥A=950¥B=1990¥A=950¥B=2040¥A=960¥B=2040¥A=960¥B=2040¥A=950¥B=2050¥第23页/共58页可串行化 视图可串行化考虑关于某个事务集的两个调度S,S,若调度S,S满足以下条件,则称它们是视图等价的:对于每个数据项Q,若事务Ti在调度S中读取了Q的初始值,那么Ti在调度S中也必须读取Q的初始值。对于每个数据项Q,若事务Ti在调度S中执行了read(Q),并且读取的值是由Tj产生的,那么Ti在调度S中读取的Q值也必须是由Tj产生
17、的。对于每个数据项Q,若在调度S中有事务执行了最后的write(Q),则在调度S中该事务也必须执行最后的write(Q)。第24页/共58页可串行化注:条件、保证两个调度中的每个事务都读取相同的值,从而进行相同的计算;条件、保证两个调度得到最终相同的系统状态。 read(A);write(A); read(B);write(B);read(A);write(A); read(B);write(B);T1T2 read(A);write(A); read(B);write(B);read(A);write(A); read(B);write(B);T1T2由由T1T1产生的产生的A A值值调度执
18、行前的调度执行前的A A值值非视图等价非视图等价第25页/共58页可串行化 read(A);write(A); read(B);write(B);read(A);write(A); read(B);write(B);T1T2read(B);write(B);read(A);write(A); T1T2由由T1T1产生的产生的A A值值 read(A);write(A);read(B);write(B);由由T1T1产生的产生的A A值值视图等价视图等价第26页/共58页可串行化 视图可串行化 如果某个调度视图等价于一个串行调度,则称该调度是视图可串行化的。 冲突可串行化调度一定是视图可串行化的
19、。存在视图可串行化但非冲突可串行化的调度。read(Q);T1T2write(Q);write(Q);write(Q);T3视图等价视图等价盲目写操作盲目写操作第27页/共58页可串行化 冲突可串行化判定 优先图(precedence graph)一个调度S的优先图是这样构造的:它是一个有向图G =(V,E),V是顶点集,E是边集。顶点集由所有参与调度的事务组成,边集由满足下述条件之一的边Ti Tj组成:在Tj执行read(Q)之前,Ti执行write(Q)。在Tj执行write(Q)之前,Ti执行read(Q)。在Tj执行write(Q)之前,Ti执行write(Q)。第28页/共58页可串
20、行化T1T2并并行行调调度度3 3T1T2read(A);write(B);T1T2write(A);read(B); write(B);并并行行调调度度4read(A);write(A);read(B);T1T2read(A);write(A);read(B);write(B);read(B); write(B);read(A);write(A);第29页/共58页可串行化如果优先图中存在边TiTj ,则在任何等价于S的串行调度S中,Ti都必须出现在Tj之前。 冲突可串行化判定准则如果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的。T1T2T1T2并
21、行调度并行调度3 3是冲是冲突可串行化的突可串行化的并行调度并行调度4 4是非是非冲突可串行化的冲突可串行化的第30页/共58页可串行化 与冲突可串行化等价的串行顺序串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序。T1T3T2T4T1T2T3T4T1T3T2T4第31页/共58页可串行化 视图可串行化判定read(Q);T1T2write(Q);write(Q);write(Q);T3T1T2T3无用的写操作无用的写操作第32页/共58页可串行化 带标记的优先图的构造设调度S包含了事务T1, T2, , Tn,设Tb, Tf是两个虚事务,其中Tb为S中所有write(Q)操作, Tf
22、为S中所有read(Q)操作。在调度S的开头插入Tb ,在调度S的末尾插入Tf,得到一个新的调度S。如果Tj读取Ti写入的数据项的值,则加入边Ti Tj。删除所有关联无用事务的边。如果在优先图中不存在从Ti到Tf的通路,则Ti是无用事务。对于每个数据项Q,如果Tj读取Ti读取写入的Q值, Tk执行write (Q)操作且TkTb ,则: 0第33页/共58页可串行化如果Ti = Tb且TjTf,则在带标记的优先图中插入边Tj Tk 。如果TiTb且Tj = Tf,则在带标记的优先图中插入边Tk Ti 。如果TiTb且TjTf,则在带标记的优先图中插入边Tk Ti与Tj Tk 。其中p是一个唯一
23、的,在前面边的标记中未曾用过的大于0的整数。 0 0 p p第34页/共58页可串行化read(A);T1T2write(A);write(A);T1TfTbT20000第35页/共58页可串行化read(Q);T1T2write(Q);write(Q);write(Q);T3T1T2T3Tb0Tf0000第36页/共58页可串行化read(Q);T1T2write(Q);write(Q);write(Q);T3T1T2T3Tb0Tf0000read(Q);11第37页/共58页可串行化T1T2T3Tb0Tf00001T1T2T3Tb0Tf00001第38页/共58页并发控制 封锁的定义 封锁
24、就是一个事务对某个数据对象加锁,取得对它一定的控制,限制其它事务对该数据对象使用。 并发控制的基本方法就是封锁。 封锁的类型 排它锁(X锁,eXclusive lock):事务T对数据对象R加上X锁,则其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁。 共享锁(S锁,Share lock):事务T对数据对象R加上S锁,则其它事务对R的X锁请求不能成功,而对R的S锁请求可以成功。第39页/共58页并发控制相容矩阵相容矩阵相容请求相容请求不相容请求不相容请求T1 T2XSXNNSNY第40页/共58页并发控制 封锁粒度 封锁对象:属性值、属性值几何、元组、关系、某索引项、整个索引、整个数
25、据库、物理页、块。 封锁粒度大,则并发度低,封锁机构简单,开销小。封锁粒度小,则并发度高,封锁机构复杂,开销高。 理想的情况是只封锁与规定的操作有关的的数据对象,这些数据对象称作事务的完整性相关域。第41页/共58页并发控制 封锁协议 保持到事务结束时才释放的锁称作长锁。在事务中途就可以释放的锁称作短锁。0级封锁协议级封锁协议BEGIN短X锁EOTlock-X(A);read(A);A := A 50;write(A); rollback;read(A);A1 := A; T1 T2 不能保证不能保证孤立退出孤立退出第42页/共58页并发控制1级封锁协议级封锁协议BEGIN长X锁EOTread
26、(A);A1 := A 1;lock-X(A);A := A1 1;write(A); commit;lock-X(A)read(A);A := A 1;write(A);commit; T1 T2 不能保证不能保证丢失修改丢失修改第43页/共58页并发控制2级封锁协议级封锁协议BEGIN 短S锁长X锁EOTlock-S(A); read(A);A1 := A;unlock(A);lock-S(A); read(A);A1 := A;unlock(A);commit;lock-X(A)read(A);A := A 1;write(A);commit; T1 T2 不能保证不能保证可重复读可重复
27、读第44页/共58页并发控制3级封锁协议级封锁协议BEGIN 长S锁长X锁EOT第45页/共58页并发控制 封锁方法 直接封锁事务对它要进行存取的数据对象直接申请加锁。已有的封锁方式NLSXNLNLSXSSS请求的封锁方式XX第46页/共58页并发控制 分层封锁数据对象从大到小有一种层次关系,当封锁了外层数据对象时也就意味着同时封锁了它的所有内层数据对象。数据库数据库段段关系关系元组元组第47页/共58页并发控制 意向(预约)封锁在分层封锁中,封锁了上层节点就意味着封锁了所有内层节点。如果有事务T1对某元组加了S锁,而事务T2对该元组所在的关系加了X锁,因而隐含地X封锁了该元组,从而造成矛盾。
28、引入意向锁I(Intend):当为某节点加上I锁,表明其某些内层节点已发生事实上的封锁,防止其它事务再去显式封锁该节点。I锁的实施是从封锁层次的根开始,依次占据路径上的所有节点,直至要真正进行显式封锁的节点的父节点为止。第48页/共58页并发控制相容矩阵T1 T2ISXI+-S-+-X-第49页/共58页并发控制更精细的相容矩阵T1 T2ISIXSXIS+-IX+-S+-+-X-第50页/共58页并发控制 死锁(Deadlock) 定义两个事务都封锁了一些数据对象,并相互等待对方释放另一些数据对象以便对其封锁,结果两个事务都不能结束,则发生死锁。 死锁发生的条件互斥条件:事务请求对资源的独占控制。等待条件:事务已持有一定资源,又去申请并等待其它资源。非抢占条件:直到资源被持有它的事务释放之前,不可能将该资源强制从持有它的事务夺去。第51页/共58页并发控制循环等待条件:存在事务相互等待的等待圈。 定理:在条件成立的前提下,条件是死锁存在的充分必要条件。事事务务号号占占有有资资源源号号请请求求资资源源号号T1R1R2T2R3R1,R2T3R2R3R2R1R3第52页/共58页并发控制 解决死锁的方法预防死锁 预先占据所需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗废物知识
- 《电工常用仪表简介》课件
- 《儿童营养基本知识》课件
- 《公务员面试培训》课件
- 卫生系列高级评审审查要点
- 2024用电信息采集系统技术规范1-3部分
- 1型糖尿病的并发症
- 医疗医学护理
- 《员工安全意识教育》课件
- 儿童肿瘤的心理护理
- 深圳2020-2024年中考英语真题专题03 阅读理解之记叙文(解析版)
- 2024年统编版新教材语文小学一年级上册全册单元测试题及答案(共8单元)
- 数据安全风险评估
- 《汽车电气设备构造与维修》课件 项目六 汽车辅助电器设备
- 国家职业技术技能标准 5-02-03-02 野生植物保护员 人社厅发201512号
- 医务人员职业暴露预防及处理课件(完整版)
- 学校食堂食品验收制度
- 部编版九年级下册第3课-美国内战-【课件】
- 2023年全国职业院校技能大赛赛项-ZZ019 智能财税基本技能赛题 - 模块三
- (正式版)JTT 1499-2024 公路水运工程临时用电技术规程
- 紫罗兰永恒花园
评论
0/150
提交评论