收藏 分享(赏)

第10章:事务.ppt

上传人:dwy79026 文档编号:8460622 上传时间:2019-06-28 格式:PPT 页数:56 大小:268KB
下载 相关 举报
第10章:事务.ppt_第1页
第1页 / 共56页
第10章:事务.ppt_第2页
第2页 / 共56页
第10章:事务.ppt_第3页
第3页 / 共56页
第10章:事务.ppt_第4页
第4页 / 共56页
第10章:事务.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、2019/6/28,1,第10章 事务与故障恢复,讲课内容: 从用户的观点看,数据库上一些操作的集合通常被认为是一个独立的单元。事务就是构成单一逻辑工作单元的操作集合。不论是否发生故障,数据库系统必须保证事务的正确执行:或者执行整个事务或者属于该事务的操作一个也不执行。 事务的概念 调度的可恢复性 事务的状态 隔离性的实现 原子性和持久性的实现SQL中事务的定义 事务的并发执行 冲突可串行化的判定 调度的可串行化 本章总结,2019/6/28,2,DBMS总体结构回顾:事务管理器,2019/6/28,3,10.1事务的概念,背景知识 古老而典型的例子: 提起事务,就会用到银行中两个账户之间转帐

2、的例子,即从账户A转XX元钱到账户B,它同时涉及到两个不同账户的读写操作。 事务中涉及数据库访问的基本操作: 读,read(X): 从数据库中传送数据项X到执行read操作的那个事务的局部缓冲区。 写,write(X): 从执行write的那个事务的局部缓冲区中把数据项X传回数据库。,2019/6/28,4,10.1事务的概念,背景知识 事务之间的相互影响: 数据库系统中同时可能有很多事务在执行,这些事务要么互不相干,要么访问相同的数据项; 对于那些访问相同数据项的事务之间的相互影响要特别处理:,2019/6/28,5,10.1事务的概念,事务的特性 为了保证数据库的完整性(一致性),数据库管

3、理系统必须维护事务的以下特性:ACID 原子性(Atomicity) 事务中的所有操作要么全部执行,要么都不执行。 一致性(Consistency) 如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还应该是一致的。 隔离性(Isolation) 即使多个事务并发执行,每个事务都感觉不到系统中有其他事务在执行,以保证数据库的一致性。 持久性(Durability) 事务成功执行后它对数据库的修改是永久的,即使系统出现故障。,2019/6/28,6,10.1事务的概念,一致性 单个事务的一致性: 由具体事务的语义决定。例如对图中的事务Ti来说,一致性要求就是事务的执行不改变账户A和账户

4、B的和; 单个事务的一致性是由对该事务进行编码的应用程序员负责的。 整个数据库的一致性: 简单地说,就是数据库中数据的完整性,包括它们的正确性; 在单个事务都是一致的状态下(静态),DBMS如何保证执行事务后整个数据库的一致性(动态)?,2019/6/28,7,10.1事务的概念,原子性 如果事务没有原子性的保证,则在发生系统故障的情况下,数据库就有可能处于不一致状态。如图所示: 即使没有故障发生,系统在某一时刻也会处于不一致状态。原子性的要求就是这种不一致状态除了在事务执行当中出现外,在其他任何时刻都是不允许的。 保证原子性是DBMS的责任: 事务管理器 数据库日志和恢复管理器,2019/6

5、/28,8,10.1事务的概念,持久性 事务成功执行后,对数据库的更新是永久的 可以用以下两种方式来达到持久性的目的: 以牺牲应用系统的性能为代价:事务对数据库所做的任何更新在事务结束前已经写入磁盘; 以多占用磁盘空间为代价:事务已执行的和已写到磁盘的、对数据库进行更新的信息是充分的,使得DBMS在系统出现故障后重新启动时,能够重新构造更新。 保证持久性也是DBMS的责任: 事务管理器 数据库日志和恢复管理器,2019/6/28,9,10.1事务的概念,如何利用日志保证持久性并提高应用系统性能? 一个事务的日志记录在向客户进程发送事务提交的应答之前必须写入磁盘,但对数据的实际变化即含有数据变化

6、的缓冲区的脏页却没有必要马上写入磁盘!,什么是事务的提交?,2019/6/28,10,10.1事务的概念,隔离性 事情的起因: 访问相同数据项的不同事务同时执行时相互影响 解决的办法: 串行执行:一个接一个地执行事务; 并发执行:同时执行多个事务,用并发控制机制来解决访问相同数据项的不同事务间的相互影响 隔离性的保证: 确保事务并发执行后的系统状态与这些事务按某种次序串行执行后的系统状态是等价的。 保证隔离性也是DBMS的责任: 除了事务、日志,主要是并发控制管理器。,2019/6/28,11,10.2事务的状态,基本术语 中止事务: 执行中发生故障、不能执行完成的事务。 回滚事务: 将中止事

7、务对数据库的更新撤消掉。 已提交事务: 成功执行完成的事务; 事务一旦提交,就不能中止它。 补偿事务 撤消已提交事务对数据库所造成影响的惟一方法是由DBA或程序员手动执行一个补偿事务,而,2019/6/28,12,10.2事务的状态,抽象事务模型 在系统中,事务必须处于以下状态之一: 活动状态: 事务开始执行后就处于该状态。 部分提交状态: 事务的最后一条语句被执行之后。 失败状态: 事务的正常执行不能继续后。 中止状态: 事务回滚且数据库被恢复到事务开始前的状态后。 提交状态: 事务成功完成之后。,2019/6/28,13,10.2事务的状态,事务状态图,2019/6/28,14,10.3原

8、子性和持久性的实现,影子数据库方案 在DBMS中: 事务管理器 数据库日志和恢复管理器提供对事务原子性和持久性实现的支持; 这是一个非常复杂的过程,我们以一个简单但效率极低的方案为例。这个方案就是最原始的影子数据库(Shadow-Database)方案,其前提条件是: 某一时刻DBMS中只有一个活动事务; 要处理的数据库只是磁盘上的一个文件; 磁盘上有一个称为db-pointer指针指向该文件。,2019/6/28,15,10.3原子性和持久性的实现,影子数据库方案 原理: 在影子数据库方案中,欲更新数据库的事务首先创建数据库的一个完整拷贝;所有的更新都在新建的拷贝上进行,而原始数据库(称为影

9、子拷贝)则原封不动。 如果任何时候DBMS中的事务不得不中止: 新拷贝简单地被删除,原始数据库不受任何影响。 如果事务执行完成,则它的提交过程如下: 首先操作系统确保数据库新拷贝的缓冲区里的所有页已被写到磁盘上(Unix系统中,flush命令); 在刷新完成后,db-pointer指针被修改为指向数据库的新拷贝,而影子拷贝则被删除。,2019/6/28,16,10.3原子性和持久性的实现,影子数据库方案 问题的核心: 只有当修改后的db-pointer指针写到磁盘上后,事务才算是提交了。因此无论是在db-pointer指针修改之前或之后发生故障,都能保证事务的原子性和持久性。问题的核心变成了,

10、2019/6/28,17,10.3原子性和持久性的实现,在文本编辑中的应用 整个文本编辑过程可以看成是一个事务,事务的更新操作就是读文件和写文件: 开始编辑之前都要复制旧文件的一个副本; 所有的文本编辑操作都在这个副本上进行; 不存盘退出就相当于中止事务,保留原来的旧文件,并删除副本文件; 存盘退出就相当于提交事务,保留新编辑的副本文件,并删除旧文件。 文本编辑事务的提交过程: 相当于执行文件重命名命令; 文件重命名是文件系统上的原子操作。,2019/6/28,18,10.3原子性和持久性的实现,影子数据库方案的评价 要复制整个数据库、不允许并发执行,因此效率太低; 为解决其他问题提供了思路:

11、即副本方法。 数据库一致性的实现 在DBMS中,事务的ACID特征最终是为了保证整个数据库的一致性,与保证单个事务的一致性不同,它的实现需要DBMS的: 事务管理器 数据库日志和恢复管理器 并发控制管理器的共同支持。,2019/6/28,19,10.4故障恢复,数据库日志 DBMS利用日志来保存所有更新数据库的事务的所有操作; DBMS的恢复管理器利用日志来恢复由 软件系统故障(如,程序的非法中断),或 硬件系统故障所造成的数据丢失; DBMS利用日志可以将数据库向前恢复到最近的一致性状态,例如: 在数据库服务器出现故障后: 回滚未提交的事务; 回滚到最后一个已提交但还未写入磁盘的事务。,20

12、19/6/28,20,10.4故障恢复,数据库日志的内容 存储事务的 开始(Begin Trans)和提交(Commit); 所涉及到的相关数据库表、元组和属性; 以及执行前和执行后的属性值。 举例:,日志记录,插入/删除:记录INSERT/DELETE语句!,2019/6/28,21,10.4故障恢复,数据库日志的维护与管理 当DBMS执行事务时,自动更新日志内容; 数据库日志本身也要做好访问控制、安全控制和转储(备份),以降低系统失败的风险。 数据库日志的使用 当系统发生故障时: DBMS检查日志中所有未提交的事务,并根据日志信息执行回滚(Rollback); 将日志中所有已提交事务的相关

13、数据写入磁盘。 日志增加了DBMS处理的开销,但对维护数据库的一致性和恢复数据库是非常有价值的。,2019/6/28,22,10.4故障恢复,数据库日志的结构 日志本身也是DBMS要管理的一个重要对象: 其结构是表? 特殊格式的文件? 例如,SQL Server将日志文件逻辑地划分为没有固定大小的虚拟日志文件(VLF)的序列,并且将所有的物理日志文件作为一个连续的文件循环使用。 日志本身的结构一般是不公开的!为什么? 商家的核心技术与该技术的先进性,怕露怯? 像Windows一样留有后门?见不得人? 容易破解数据库的结构信息,从而攻击它; 对新应用的巨大作用,如实体化视图的更新,2019/6/

14、28,23,10.4故障恢复,数据库恢复 通常是指在发生故障时,将数据库从某个不一致的状态恢复到某个一致的状态; 数据库恢复的基本技术:数据转储和日志。 数据转储(备份) 将数据库信息复制到其他介质上的过程。复制得到的备份文件称为后援副本,简称副本 转储的方式: 海量转储(全备份):每次转储整个数据库; 增量转储:只转储自上次转储后变化的数据; 日志转储:只转储数据库日志。,2019/6/28,24,10.4故障恢复,数据库故障的类型与原因 系统故障: 软件故障:OS、DBMS; 程序中断:APP错误-除数为0、非法操作; 系统死锁:需要回滚事务。 介质故障: 硬件故障:内存、磁盘损坏,磁盘满

15、等; 外部因素:火灾、地震、洪水等。 病毒破坏: 人为因素:由于访问控制与安全措施不到位,使得病毒攻击了数据库,破坏了硬盘数据。,2019/6/28,25,10.4故障恢复,数据库故障的恢复 事务故障: 指事务在运行至正常终止点前被中止,这时恢复子系统应利用日志文件撤消(UNDO)此事务对数据库已做的修改; 最简单的系统故障,例如死锁。 事务故障的恢复由DBMS自动完成,对用户来说是透明的。具体的恢复步骤是: 反向扫描日志文件; 找出该事务的所有更新操作; 对每一个更新操作做它的逆操作; 一直处理到该事务的开始标记。,数据库服务器还正常运行;主要是UNDO缓存的内容,以便后续的计算正确进行!,

16、事务所有的更新并没有写入磁盘,都还在缓存;检查点不会在一个事务执行的过程中插入执行的。,2019/6/28,26,10.4故障恢复,数据库故障的恢复 系统故障: 造成数据库不一致的具体原因: 未提交的事务对数据库的更新已写入磁盘; 已提交的事务对数据库的更新未写入磁盘。 系统故障的恢复步骤是: 正向扫描日志文件,找出在故障发生前: 已提交的事务,进入重做队列; 未提交的事务,进入撤消队列。 重做(REDO)与撤消(UNDO): REDO:正向扫描日志文件,根据重做队列重新完成对数据库的更新操作; UNDO:反向扫描日志文件,根据撤消队列执行相关事务的逆操作。,数据库服务器已经崩溃,以下描述的是

17、在重新启动系统后的恢复过程。,2019/6/28,27,10.4故障恢复,数据库故障的恢复 介质故障与病毒破坏: 磁盘上的物理数据库遭到破坏。 介质故障的恢复步骤是: 安装副本,使数据库恢复到备份时的一致状态; 从故障点开始反向扫描日志文件,找出所有已提交的事务,将其加入重做堆栈; 正向扫描日志文件,根据重做堆栈对每一个REDO事务(从栈顶开始处理REDO事务)重新实施对数据库的更新操作; 最后数据库恢复到故障前某一时刻的一致状态。 因为是副本数据库,所以无须UNDO操作。,2019/6/28,28,10.4故障恢复,检查点 重装副本,再将所有REDO事务重新执行,需要相当长的时间;但是,这也

18、为在某些情况下尽可能少做REDO事务提供了思路: DBMS的检查点机制: DBMS定时检查数据库和日志文件,及时将对数据库的更新结果写入磁盘,并在日志中写入一条检查点记录。 当需要恢复数据库时,可能只有那些在检查点后面的事务才需要恢复!,事务执行完成与提交是两回事情;检查点只能在事务处于部分提交状态或提交状态时才能执行,而不能在事务执行的过程中执行。,2019/6/28,29,10.4故障恢复,SQL Server 2000中的故障恢复 事务的状态与更新数据是否写磁盘的关系: 提交已写或提交未写 活动已写或活动未写 故障恢复需要执行REDO和UNDO操作: REDO操作要检查已经提交的事务对数

19、据库的更新是否写到了磁盘上,如果没有,则要从日志中找出更新数据,写入磁盘; UNDO操作检查那些在发生故障时正在进行,但尚未完成的事务,如果发现它们已经将更新数据写入磁盘,则必须从日志中找到数据的原始值,用该值将数据库恢复到事务执行前的状态。,2019/6/28,30,10.4故障恢复,SQL Server 2000的故障恢复算法 Phase :分析阶段 从日志的最后一次检查点开始,正向扫描日志直到故障点,构造内存脏页表DPT和活动事务表: 避免读那些不用恢复的页(提交已写); 避免重写没有日志记录的数据更新(活动未写)。 Phase :重做阶段 从最小恢复LSN开始,正向扫描日志,利用DPT

20、重新执行已提交的事务,直到故障点。 Phase :反做阶段 从故障点开始,反向扫描日志,利用DPT执行活动事务的反操作,直到日志中最老的事务。,2019/6/28,31,10.4故障恢复,算法图示最小恢复LSN,2019/6/28,32,10.5事务的并发执行,为什么要并发执行? 事务的串行执行虽然简单,但效率不高; 没有充分利用计算机的磁盘I/O和CPU计算可以并行工作的特性; 利用磁盘I/O和CPU的并行性,并发地执行多个事务,可以: 提高系统的吞吐量,即单位时间内执行的事务数 减少事务的平均响应时间,即一个事务从开始执行到完成所需要的平均时间。否则: 如果事务串行执行,那么短事务就不得不

21、等待排在它前面的长事务的漫长执行,从而导致难以预测的时间延迟!,2019/6/28,33,10.5事务的并发执行,并发执行的基础 并发执行与并行执行的区别? DBMS如何并发执行多个事务? 通过事务调度: 调度是指一组事务中指令交叉执行的序列。 一组事务的一个调度必须保证: 包含这组事务的全部指令; 必须保持各条指令在各个事务中出现的顺序,即调度不能改变单个事务中指令的先后关系。这种关系是由程序员决定的,它保证了单个事务的一致性。 调度的目的: 就是用于确定那些可以保证数据库一致性的一组事务的所有指令的执行序列!,2019/6/28,34,10.5事务的并发执行,调度的分类 串行调度: 由来自

22、各个事务的指令序列组成; 属于同一个事务的指令在调度中紧挨在一起。 串行调度的方案: 对于有个事务的事务组,共有!个可能的串行调度方案; 举例:包含两个事务T1和T2的调度1。,2019/6/28,35,10.5事务的并发执行,调度的分类 并发调度: 由来自各个事务的全部指令组成; 属于不同事务的指令在调度中交叉在一起,但仍然保持在各自事务中的先后顺序。 并发调度的执行: 操作系统先选一个事务执行一段时间; 然后切换上下文,执行别的事务一段时间,接着又切换回去,如此下去,2019/6/28,36,10.6调度的可串行化,调度的目的? 调度的等价性 如果一个并发调度的执行效果与一个包含相同事务的

23、串行调度的执行效果是相同的,我们就说它们是等价的; 事务的串行执行可以保证数据库的一致性,这时不言而喻的; 因此,与之等价的并发调度也可以保证数据库的一致性。 是不是任何一个并发调度都能变成一个与之等价的、包含相同事务的串行调度?,2019/6/28,37,10.6调度的可串行化,调度的简化 事务并发执行时,只有访问相同数据项的读/写操作 read和write才会在事务间产生影响; 对于数据项Q,在 read(Q) 和write(Q)指令之间,事务可对驻留在事务局部缓冲区中数据项Q的拷贝执行任意操作; 从调度角度来看,事务的重要操作是read与write指令,通常调度中只显示这些指令。,201

24、9/6/28,38,10.6调度的可串行化,调度中指令的可交换性 对于一个调度S来说,假设Im和In(mn)分别是属于事务Ti和Tj的两条连续的读写指令: 如果Im和In分别访问不同的数据项,则交换Im和In的顺序不会影响调度中任何事务的执行结果; 如果Im和In访问相同的数据项Q,则两者的顺序就不能随便交换,需要看Im和In是不是冲突指令。,2019/6/28,39,10.6调度的可串行化,调度中指令的可交换性,2019/6/28,40,10.6调度的可串行化,指令的冲突 当Im和In是不同事务在相同数据项上的操作,且其中至少有一条是write指令时,称Im和In是冲突的 例如,左图的调度3

25、中: T1的write(A)与T2的read(A)是冲突的; T2的write(A)与T1的read(B)是不冲突的。 不冲突的指令可以交换先后顺序。,2019/6/28,41,10.6调度的可串行化,非冲突指令的交换,2019/6/28,42,10.6调度的可串行化,冲突等价与冲突可串行化 若Im和In是调度S中不同事务且不冲突的两条连续指令,则交换Im和In的顺序就得到一个与S等价的调度S; 若调度S经过一系列非冲突指令交换变成调度S,则称S与S是冲突等价的; 如果说一个调度S是冲突可串行化的,是指该调度S与一个串行调度冲突等价。,2019/6/28,43,10.6调度的可串行化,视图等价

26、 存在这样的调度,它们产生相同的结果,但却不是冲突等价的; 两个有相同事务集的调度S和S,若S和S满足下面三个条件,则它们是视图等价的: 对每个数据项Q,若事务Ti在S中读取了Q的初始值,那么Ti在S中也必须读取Q的初始值; 对每个数据项Q,若事务Ti在S中执行了read(Q) 且读取的值是由Tj产生的(write(Q),则Ti在S中读取的值也必须是由Tj产生的(write(Q); 对每个数据项Q,若在S中有事务执行了最后的写操作write(Q),则在S中该事务也必须执行最后的写操作write(Q)。,2019/6/28,44,10.6调度的可串行化,视图可串行化 在视图等价的三个条件中,前两

27、个条件保证两个调度中的每个事务都读取了相同的值; 第三个条件和前两个条件一起保证了两个调度都能得到相同的最终结果; 视图等价引出了视图可串行化的概念。若某个调度视图等价于一个串行调度,则该调度是视图可串行化的。 举例:,2019/6/28,45,10.7调度的可恢复性,问题的提出 若调度中事务Ti失败了,怎么办? 调度中那些依赖于Ti的其他事务(如Tj:它读取了由Ti所写的数据)怎么办? 问题的解决 可恢复调度:处理冲突事务的办法?串行! 对于每对事务Ti和Tj,如果Tj读取了由Ti所写的数据项,则Ti应先于Tj提交。 为什么?,2019/6/28,46,10.7调度的可恢复性,问题的解决 无

28、级联调度:处理冲突事务的办法?串行! 因一个事务回滚而导致调度中一系列事务回滚的现象称为级联回滚; 无级联调度应满足: 对于每对事务Ti和Tj,如果Tj读取了由Ti所写的数据项,则Ti必须在Tj读取之前提交 为什么? 无级联调度的条件实际上是说一个事务不能读,2019/6/28,47,10.8隔离性的实现,事务隔离性的目的 把DBMS中并发执行的事务间的相互影响给隔离开,就好像它们是串行的一样。因此就要寻找与这些并发事务等价的串行事务序列。 隔离性的实现原理 冲突可串行化或视图可串行化的调度可以保证并发调度与某个串行调度等价。 并发控制机制 DBMS中并发控制管理器的并发控制机制要保证DBMS

29、只产生冲突可串行化的或视图可串行化的并发调度。,2019/6/28,48,10.8隔离性的实现,用于产生串行调度的并发机制 下面用一个简单的例子来说明,考虑如下机制: 一个事务在它开始前获得整个数据库的锁,在它提交之后才释放这个锁; 当一个事务持有锁时,其他事务绝对不能获得这个锁,因此它必须等待别的事务释放锁; 采用上述封锁策略,使得DBMS一次只能执行一个事务,所以这种机制只会产生串行调度。,2019/6/28,49,10.9SQL中事务的定义,事务的开始 begin transaction 事务的结束 commit transaction rollback transaction 实际问题

30、 如果没有用begin tran定义事务,那么DBMS如何认定哪些SQL语句是一个事务呢?例如: insert into test1 values (key1,for1) insert into test2 values (for1,key1),2019/6/28,50,10.10冲突可串行化的判定,如何判断一个调度是冲突可串行化的? Step1:根据调度产生调度的优先图: 有向图G=(V,E):其中V是顶点集,E是边集; 边TiTj存在于边集E的条件是: Ti的write(Q)在Tj的read(Q)之前执行; Ti的read(Q)在Tj的write(Q)之前执行; Ti的write(Q)在T

31、j的write(Q)之前执行。 如果有向图中存在边TiTj,则在任何与该调度等价的串行调度中,Ti都必须出现在Tj之前。 Step2:采用一个合适的算法检查调度的优先图中是否存在有向环: 如果有,则它就不是冲突可串行化的;否则,2019/6/28,51,10.10冲突可串行化的判定,示例1 并发调度3如右所示: 它的优先图构造如下:因此调度3等价于串行调度。,2019/6/28,52,10.10冲突可串行化的判定,示例2 本调度的优先图构造如右图所示; 因此它等价于串行调度:,2019/6/28,53,10.10冲突可串行化的判定,示例3 本调度的优先图如右所示 因为该调度的优先图中存在有向环

32、,所以它不是冲突可串行化的。,2019/6/28,54,10.10冲突可串行化的判定,示例4 假设某并发调度的优先图如右所示: 由于图中没有有向环,因此它是冲突可串行化的; 据图可以确定在串行调度中Ti在最前,Tm在最后; 该调度等价于串行调度: ,或 ,2019/6/28,55,小结:ACID与调度及故障恢复,事务的ACID特性:DBMS如何保证它们? 在DBMS中事务提交的含义是什么? DBMS如何保证整个数据库的一致性? 调度的等价性是指:包含相同事务集的不同调度,它们的执行效果是相同的。 冲突等价:冲突可串行化 视图等价:视图可串行化 初始读 中间读 最终写,2019/6/28,56,小结:ACID与调度及故障恢复,数据库日志记录的内容是什么? 发生故障前,DBMS中事务的状态与事务的更新数据的位置关系有哪些? 什么是脏页?提交未写、活动已写 什么是最小恢复LSN?重做事务中最小的LSN 故障恢复的三个阶段是什么? 什么是检查点? 为什么要重做事务? 为什么要反做事务?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报