数据库系统原理:BDB7 数据库事务管理

上传人:人*** 文档编号:570071801 上传时间:2024-08-01 格式:PPT 页数:59 大小:320KB
返回 下载 相关 举报
数据库系统原理:BDB7 数据库事务管理_第1页
第1页 / 共59页
数据库系统原理:BDB7 数据库事务管理_第2页
第2页 / 共59页
数据库系统原理:BDB7 数据库事务管理_第3页
第3页 / 共59页
数据库系统原理:BDB7 数据库事务管理_第4页
第4页 / 共59页
数据库系统原理:BDB7 数据库事务管理_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《数据库系统原理:BDB7 数据库事务管理》由会员分享,可在线阅读,更多相关《数据库系统原理:BDB7 数据库事务管理(59页珍藏版)》请在金锄头文库上搜索。

1、第七章第七章 数据库事务管理数据库事务管理提纲n n事务概念n n事务状态n n事务调度n n事务的三类不一致性n n封锁n n三级封锁协议n n死锁 数据库事务管理数据库事务管理n n并发调度的可串行性n n两段锁协议n n封锁的粒度n n故障的种类n n恢复的实现技术n n恢复策略n n具有检查点的恢复技术n n数据库镜像事务概念事务概念n n事务定义n事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位例如银行转帐nSQL中事务的定义事务以Begin transaction开始,以Commit work或 Rollback work结束Comm

2、it work表示提交,事务正常结束Rollback work表示事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态事务概念事务概念n示例银行转帐:事务T从A帐户过户¥50到B帐户T:read(A);A := A 50;write(A);read(B);B := B + 50;write(B);read(X):从数据库传送数据项X到事务的工作区中write(X):从事务的工作区中将数据项X写回数据库事务概念事务概念n n事务特性(ACID)n原子性原子性(Atomicity)事务中包含的所有操作要么全做,要么全不做原子性由恢复机制恢复机制实现n一致性一致性(Consistency)事务的

3、隔离执行必须保证数据库的一致性事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态数据库的一致性状态由用用户户来负责,由并并发发控控制制机制机制实现如银行转帐,转帐前后两个帐户金额之和应保持不变事务概念事务概念n隔离性隔离性(Isolation)系统必须保证事务不受其它并发执行事务的影响对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行隔离性通过并发控制机制并发控制机制实现n持久性持久性(Durability)一个事务一旦提交之后,它对数据库的影响必须是永久的(又称永久性)系统发生故障不能改变事务的持久性持久性通过恢复机制恢

4、复机制实现事务状态事务状态活动状态活动状态失败状态失败状态部分部分提交状态提交状态提交状态提交状态中止状态中止状态初始状态初始状态事务无法继事务无法继续正常执行续正常执行事务回滚,数据库恢事务回滚,数据库恢复到事务开始前状态复到事务开始前状态最后一条语最后一条语句被执行后句被执行后成功完成,永成功完成,永久写入数据库久写入数据库事务调度事务调度n n事务的调度n事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序n一组事务的调度必须保证n包含了所有事务的操作指令n一个事务中指令的顺序必须保持不变n串行调度n在串行调度中,属于同一事务的指令紧挨在一起n对于有n个事务的事务组,可以有n

5、!个有效调度n并行调度n在并行调度中,来自不同事务的指令可以交叉执行n当并行调度等价于某个串行调度时,则称它是正确的事务调度事务调度n n并行并行 Vs Vs 串行串行n基本比较n并行事务会破坏数据库的一致性n串行事务效率低n并行的优点n一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量吞吐量n系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平平均均响应时间响应时间n核心问题在保证一致性的前提下最大限度地提高并发度事务调度事务调度n n事务执行示例T1read(A);A := A 50;wr

6、ite(A);read(B);B := B + 50;write(B);T2read(A);temp := A0.1A := A temp;write(A); read(B);B := B + temp;write(B);从A过户50¥到B从A过户存款的10%到B开始状态:A=1000¥B=2000¥A+B=3000¥事务调度事务调度 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;

7、write(B);T1T2A=950¥B=2050¥结束状态:A=855¥B=2145¥A+B=3000¥串串行行调调度度1 1事务调度事务调度 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事务调度事务调度 read(A); A := A 50; wri

8、te(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; write(A); A=855¥B=2000¥A=855¥B=2050¥并并行行调调度度3不一致性不一致性:丢失修改:丢失修改 read(A); A := A 50; B := B + temp; write(B);T1T2A=1000¥B=2000¥结束状态:A=950¥B=2100¥A+B=

9、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不一致性不一致性:读脏数据:读脏数据read(A);A1 := A;read(B);B1 := B;A1 + B1 = 2950;Rollback;T1T2A=1000¥B=2000¥read(A);A := A 50;write(A); 并并行行调调度度5不一致性不一致性:不能重复读:不能重复读r

10、ead(A);A1 := ARead(B)B1:=BA1+B1=3000T1T2A=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¥并并行行调调度度6事务调度事务调度:发生幻象:发生幻象select *from SCwhere CNO = C01 and SNO = S01T1T2发生幻象insert into SC values(S01, C01, null)产生上述三类不一致性的主要原因是并发控制破坏了事务的隔离性。封锁封锁

11、(Locking)n n基于锁的并发控制n封锁是实现并发控制的一个重要技术n共享锁(读锁、S锁)n排他锁(写锁、X锁)n任何事务在对某一数据对象(表、记录、数据项)进行读写操作时必须先对该数据加锁封锁封锁(Locking)相容矩阵相容矩阵不相容请求不相容请求相容请求相容请求封锁协议封锁协议n n三级封锁协议n一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束(commit或rollback)才释放。 可防止丢失修改丢失修改,并保证事务T是可恢复可恢复的n二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 还可以防止读读“脏脏”数据数据n三

12、级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 还可以防止不可重复读不可重复读一级封锁协议:可防止丢失修改一级封锁协议:可防止丢失修改 Xlock A; read(A); A := A 50; write(A); Xlock B; read(B); B := B + 50; write(B); Commit; Unlock A; Unlock B;T1T2Xlock A;等待等待等待等待等待等待等待获得Xlock A;read(A);temp := A0.1;二级封锁协议:可防止读脏数据二级封锁协议:可防止读脏数据Slock A;等待等待等待等待rea

13、d(A);A1 := A;T1T2Slock A;read(A);Unlock A;A := A 50;Xlock A;write(A); Rollback;Unlock A; 三级封锁协议三级封锁协议:可防止不可重复读:可防止不可重复读Slock A;Slock B;read(A);Read(B)C:=A+B=3000;read(B);C:=A+B=3000;Commit;Unlock A;Unlock B;T1T2Xlock A;等待等待等待等待等待等待获得Xlock A;Xlock B;read(A);A := A 50;write(A); read(B);B := B + 50;wri

14、te(B); 并发控制并发控制活锁活锁n n活锁 避免活锁的简单方法是采用先来先服务的策略。 Lock AUnlockLock A等待等待等待等待等待等待等待等待Lock ALock ALock AT1T3nT2并发控制并发控制死锁死锁n n死锁 如果有两个事务同时要对两个不同的数据加锁就可能发生相互等待的问题,从而形成死锁。lock-S(A);lock-X(B);wait.lock-S(B)lock-X(A)wait T1 T2 T1: lock-S(A)lock-X(B) unlock(A)unlock(B)T2: lock-S(B)lock-X(A) unlock(A)unlock(B)

15、死锁处理死锁处理n n死锁预防n一次封锁法(降低了并发度)n顺序封锁法(数据对象多,很难事先确定每一个事务要封锁哪些对象)n n死锁检测与恢复n基本观点:允许发生死锁,再检测,然后选择代价最小的事务回滚n超时法判断事务的等待时间超过规定的时限,认为有死锁。缺点:时限不太好设置,时限太短可能误判死锁,时限太长,死锁发生又不能及时发现。死锁处理死锁处理n等待图法周期性地检查事务等待图,如果发现等待图中存在回路,就表示系统中出现死锁。T1T3T2T4T1T3T2T4可串行化可串行化n n定义 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,这种调度策略称为可串行化的

16、调度。n n可串行性(Serializability)是并发事务正确性的准则。n n可串行化包括冲突可串行化、视图可串行化等。可串行化可串行化n n指令的顺序考虑一个调度S中的两条连续指令(仅限于read与 write操作)Ii与Ij,分别属于事务Ti与TjIi = read(Q), Ij = read(Q);Ii = read(Q), Ij = write(Q);Ii = write(Q), Ij = read(Q);Ii = write(Q), Ij = write(Q);在 情况下,Ii与Ij的次序无关紧要。其余情况下,Ii与Ij的次序不同,其执行结果也不同,数据库最终状态也不同可串行化

17、可串行化n n冲突指令当两条指令是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时,则称这两条指令是冲突的如在、情况下,Ii与Ij 是冲突的非冲突指令交换次序不会影响调度的最终结果n n冲突等价如果调度S可以经过一系列非冲突指令交换转换成调度S,则称调度S与S是冲突等价的可串行化可串行化read(A);write(A);read(B);write(B);T1T2read(B); write(B);并并行行调调度度read(A);write(A);read(A);write(A);read(B);write(B);T1T2write(B);read(A);write(A);re

18、ad(B);read(A);write(A);read(B);write(B);write(B);read(A);write(A);read(B);交换1交换2交换3read(A);write(A);read(B);write(B);read(B);write(B);read(A);write(A);可串行化可串行化n n冲突可串行化判定n优先图(precedence graph)一个调度S的优先图是这样构造的:它是一个有向图G =(V,E),V是顶点集,E是边集。顶点集由所有参与调度的事务组成,边集由满足下述条件之一的边Ti Tj组成:在Tj执行read(Q)之前,Ti执行write(Q)

19、在Tj执行write(Q)之前,Ti执行read(Q)在Tj执行write(Q)之前,Ti执行write(Q)可串行化可串行化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);可串行化可串行化如果优先图中存在边TiTj ,则在任何等价于S的串行调度S中,Ti都必须出现在Tj之前n冲突可串行化判定准则如

20、果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的T1T2T1T2并行调度并行调度3 3是冲是冲突可串行化的突可串行化的并行调度并行调度4 4是非是非冲突可串行化的冲突可串行化的可串行化可串行化n与冲突可串行化等价的串行顺序串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序T1T3T2T4T1T2T3T4T1T3T2T4并发控制并发控制两段锁协议两段锁协议n n两段锁协议(Two-phase Locking)n内容:在对任何数据进行读写之前,事务首先要获得对该数据的封锁。在释放一个封锁之后,事务不再获得任何其它封锁。即事务分为两个阶段:生长阶段:获

21、得封锁。收缩阶段:释放封锁。n定理:若所有事务均遵从两段锁协议,则这些事务的所有并行调度都是可串行化的。并发控制并发控制两段锁协议两段锁协议n示例lock-S(A)lock-S(B)lock-X(C)unlock(A) unlock(C)unlock(B)遵从两段锁协议。lock-S(A)unlock-S(A)lock-S(B)lock-X(C) unlock(C)unlock(B)不遵从两段锁协议。n思考思考 (1)(1)、两两段段锁锁协协议议与与预预防防死死锁锁的的一一次次封封锁锁法法有有何何区区别别? (2) (2)、遵守两段锁协议的事务会不会发生死锁?遵守两段锁协议的事务会不会发生死锁

22、? (3) (3)、两段锁协议与三级封锁协议有没有什么关系?、两段锁协议与三级封锁协议有没有什么关系?并发控制并发控制两段锁协议两段锁协议n一次封锁法遵守两段锁协议,但两段锁协议并不需要一次将所有要使用的数据全部加锁。n遵从两段锁协议仍可能发生死锁lock-S(A);lock-X(B);wait.lock-S(B)lock-X(A)wait T1 T2 T1: lock-S(A)lock-S(B) unlock(A)unlock(B)T2: lock-S(A)lock-S(B) unlock(A)unlock(B)n三级封锁协议是两段锁协议的前提。多粒度封锁多粒度封锁 数据库元素存在层次结构,

23、例如,数据库、表、页面、元组。DBTAB3TAB2TAB1TAB9p13p12p11t922p93p92p91t134t133t132t131t921封锁的粒度封锁的粒度n n封锁对象的大小称为封锁粒度。n n以小的粒度作为封锁单位=提高并发度 以大的粒度作为封锁单位=减小封锁开销n n多粒度封锁:一个系统应该同时支持多种封锁粒度供不同的事务选择。n n多粒度封锁协议:允允许许多多粒粒度度树树中中的的每每个个结结点点被被独独立立加加锁锁(显示加锁),对对一一个个结结点点加加锁锁意意味味着着这这个个结结点点的的所所有有后后裔裔结结点点也也被被加加以以同同样样类类型型的的锁锁(隐式加锁)。)。多粒

24、度封锁多粒度封锁问题:当一个事务申请对某数据项加锁时,系统如何判断是否有锁冲突存在。例1:事务Ti已显式S封锁了tab1,事务Tj申请对t132加X锁。例2:事务Ti已显式X封锁了p93 ,事务Tj申请对tab9加S锁。多粒度封锁多粒度封锁解决:引入新的锁类型 意向锁(I) 共享型意向锁(IS):表示在子元素上获得共享锁的意向。 排他型意向锁(IX):表示在子元素上获得排他锁的意向。 共享排他型意向锁(SIX):显式地以共享方式封锁当前元素,并表示在子元素上获得排他锁的意向。多粒度封锁多粒度封锁T1 T2T1 T2S SX XISISIXIXSIXSIXS SY YN NY YN NN NX

25、XN NN NN NN NN NISISY YN NY YY YY YIXIXN NN NY YY YN NSIXSIXN NN NY YN NN N数据锁的相容矩阵多粒度封锁多粒度封锁多粒度封锁-封锁过程:n n 要在任何元素上加S或X锁,必须从层次结构的根开始。n n 如果已到达要封锁的元素的位置,则不需要进一步查找。请求该元素上的S或X锁。n n 如果希望封锁的元素在层次结构中更靠下,那么在这一结点上加一个意向锁;当前结点上的锁被授予后,继续向适当的子结点行进。 重复后两个步骤,直到到达所需结点。多粒度封锁多粒度封锁例1:事务Ti已显式S封锁了tab1,事务Tj申请对t132加X锁。DB

26、TAB3TAB2TAB1TAB9p13p12p11t922p93p92p91t134t133t132t131t921Ti:ISTj:IXTj:IXTi:SX多粒度封锁多粒度封锁例2:事务Ti已显式X封锁了p93 ,事务Tj申请对tab9加S锁。DBTAB3TAB2TAB1TAB9p13p12p11t922p93p92p91t134t133t132t131t921Ti:IXTj:ISTj:STi:IXXTi:X其他解决方案其他解决方案n n实例:银行转帐故障的种类故障的种类n n事务内部的故障事务内部的故障n可预期的(余额不足)n非预期的(运算溢出、并发事务死锁等)n通过事务撤消(UNDO)恢复

27、n n系统故障系统故障n死机、CPU故障、OS故障、突然停电等导致系统需要重新启动。nUNDO未完成事务、REDO已提交事务n n介质故障介质故障n硬故障(磁盘损坏等外存故障)n n计算机病毒计算机病毒恢复的实现技术恢复的实现技术 恢复的基本原理是冗余,而建立冗余数据最常用的技术是数据转储和登录日志文件。n n数据转储n由DBA定期将DB复制得到后备副本保存起来n转储可分为静态转储和动态转储n静态转储必须在无运行事务时进行n动态转储允许在转储期间对DB进行存取或修改n转储还可分为海量转储和增量转储恢复的实现技术恢复的实现技术n n登记日志文件(登记日志文件(logginglogging)n日志

28、文件的格式与内容 两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。 以记录为单位的日志文件中要登记的内容包括事务的开始与结束标记以及各个事务的所有更新操作。 日志记录的内容主要包括: 事务标识、操作的类型、操作对象、更新前数据的旧值和更新后数据的新值。 以数据块为单位的日志文件,其日志记录的内容包括事务标识和更新的数据块。恢复的实现技术恢复的实现技术n日志文件的作用n事务故障恢复和系统故障恢复必须用日志文件。n在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。n在静态转储方式中,很多时候也需建立日志文件。n登记日志文件 “先写日志文件原则”:n登记次

29、序严格按并发事务执行的时间次序。n必须 先写日志文件,后写数据库。恢复策略恢复策略n n事务故障的恢复 事务故障恢复是由系统自动完成的,对用户是透明的。 系统恢复步骤: 1、反向扫描文件日志,找到该事务的更新操作。 2、对该事务的更新操作进行逆操作。 3、反向扫描日志文件,逐条找到其他更新操作,并同样进行逆操作,直到读到该事务的开始标记,事务故障恢复即告完成。恢复策略恢复策略n n系统故障的恢复系统故障的恢复 系系统统故故障障的的恢恢复复是是由由系系统统在在重重新新启启动动时时自自动动完完成成的,不需要用户的干预。的,不需要用户的干预。 系统的恢复步骤:系统的恢复步骤: 1、正向扫描日志文件,

30、找出在故障发生前已经提交的事务,将其事务标识记入重做(REDO)队列。同时找出故障发生前尚未完成的事务,将其事务标识记入撤消(UNDO)队列。 2、对撤消队列中的各个事务进行撤消(UNDO)处理。(反向扫描日志文件,对每个UNDO事务的更新操作进行逆操作,即写入旧值。) 3、对重做队列中的各个事务进行重做(REDO)处理。(正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作,即重新写入新值。)恢复策略恢复策略n n介质故障的恢复 介质故障的恢复一般由DBA来完成。 恢复的步骤: 1、装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。(对于动态转储的数据库副本,还需

31、同时装入转储开始时刻的日志文件副本,通过REDO+UNDO操作恢复到一致性状态。) 2、装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。具有检查点的恢复技术具有检查点的恢复技术n n需要增加一个重新开始文件和在日志文件中增加检查点(checkpoint)记录,并让恢复子系统在登录日志文件期间动态维护日志。n n检查点记录的内容包括:n建立检查点时刻所有正在执行的事务清单。n这些事务最近一个日志记录的地址。n n重新开始文件用来记录各个检查点记录在日志文件中的地址。具有检查点的恢复技术具有检查点的恢复技术n n动态维护日志文件的方法是周期性地建立检查点,保存数据库状态。

32、具体步骤: 1、将当前日志缓冲中的所有日志记录写入磁盘的日志文件上; 2、在日志文件中写入一个检查点记录; 3、将当前数据缓冲的所有数据记录写入磁盘的数据库中; 4、把检查点记录在日志文件中的地址写入一个重新开始文件。具有检查点的恢复技术具有检查点的恢复技术系统使用检查点方法进行恢复的步骤:系统使用检查点方法进行恢复的步骤:1、在重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。2、由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST,把ACTIVE-LIST暂时放入UNDO-LIST,REDO-LIST暂为空。3、从检

33、查点开始正向扫描日志文件。如有新开始的事物Ti,把Ti暂时放入UNDO-LIST;如有提交的事务Tj,把Tj从UNDO-LIST移到REDO-LIST,直到日志文件结束。4、对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。具有检查点的恢复技术具有检查点的恢复技术 Tc(检查点) Tf(系统故障)T1T2T3T4T5不要REDO REDO 撤消数据库镜像数据库镜像n n数据库镜像主要是运用越来越廉价的冗余磁盘来避免磁盘介质故障影响数据库的可用性。n n数据库镜像的功能:n用于数据库恢复 (DBMS自动保证镜像数据与主数据的一致性)n用于并发操作 (不用等待其他用户释放排他锁,就可以读取镜像数据库上的数据)n n数据库镜像是通过复制数据实现的,因而会降低系统运行效率。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号