数据库教学课件:第7章 事务_第1页
数据库教学课件:第7章 事务_第2页
数据库教学课件:第7章 事务_第3页
数据库教学课件:第7章 事务_第4页
数据库教学课件:第7章 事务_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chapter7事务本章内容参考:数据库概念(第四版)byA.SilberschatzChapter15Transactions补充内容本章内容特色:以介绍(事务的)概念为重点以建立事务模型为目标为并发处理和恢复作准备概念不难理解,但实现细节很复杂本章要解决的关键问题:理解事务处理中面临的主要矛盾及其解决方法主要内容事务概念事务状态原子性与持久性的实现并发执行可串行性可恢复性隔离性的实现SQL中事务的定义检测可串行性事务概念事务是程序的逻辑运行单位事务必须保持数据库的一致性在事务执行过程中,数据库可能处于不一致状态当事务结束时,数据库必须处于一致状态要处理两个问题:各种故障,如硬件故障和系统崩溃多个事务的并发执行“多快”和”好省”的矛盾ACID性质(10/19)Atomicity:事务的操作要么完全执行,要么全不做(ALLORNOTHING)Consistency:在隔离状态下事务的执行保持数据库的一致性Isolation:尽管多个事务可以并发执行,每个事务必须不了解其他并发执行的事务,事务的中间结果对其他并发事务是不可见的Durability:事务成功结束后,对数据库所做的更新将永久化,即使再发生系统故障也不受影响记忆方法:”原致孤久”另一记忆法ACID(酸的,刻薄)为保持数据一致性,数据库系统必须确保:转账例从账户A

转移$50到账户B:1. read(A)2. A:=A–503. write(A)4. read(B)5. B:=B+50write(B)一致性要求–事务执行前后A与B之和保持不变原子性要求–若事务在第3步之后及第6步之前失败,系统应确保事务所做更新不被反映到数据库中,否则会出现不一致转账例

持久性要求—一旦用户被告知事务已经完成(即,$50转账已经发生),则即使发生故障,事务对数据库的更新也必须持久化隔离性要求—若在第3步与第6步之间允许另一事务存取部分更新的数据库,该事务将看到不一致的数据库(A+B

小于正确值)可通过串行(即一个接一个)执行事务来确保隔离性,但是并发执行多个事务具有很多好处事务状态(10/29)Active:初始状态,事务执行时处于此状态Partiallycommitted:最后一条语句执行之后Failed:发现不能继续正常执行之后进入该状态Aborted:事务已回滚并且数据库已恢复到事务开始前的状态之后,此后有两种选择:重启事务–仅当非内部逻辑错误时杀死事务Committed:事务成功结束之后事务状态

事务运行中可能发生的状态转换(宏观描述)原子性与持久性的实现数据库系统的恢复管理器负责实现对原子性与持久性的支持shadow-database(影子数据库)方案:假设每次只有一个事务处于激活状态指针db_pointer总是指向当前的数据库的一致拷贝所有更新都是对数据库的一份shadowcopy

进行的,仅当事务到达部分提交状态并且所有更新页都已写回磁盘时db_pointer才指向更新后的shadowcopy如果事务失败,db_pointer所指向的旧的一致拷贝仍可用,而shadowcopy则被删除原子性与持久性的实现假设磁盘不出故障可用于文本编辑器,但对大型数据库极端低效:执行一个事务需要拷贝整个数据库shadow-database方案:并发执行多个事务可同时运行的好处是:增加处理器和磁盘的利用率,导致更好的事务吞吐量:

一个事务正在使用CPU而另一个正在读写磁盘减少事务的平均响应时间:短事务不应等在长事务之后并发控制方案

:达到隔离性的机制,即控制并发事务的交互以防止它们破坏数据库的一致性第8章介绍调度调度–并发事务的操作按时间顺序执行的序列事务集合的一个调度必须包括所有事务的所有操作必须保持各个事务内部的操作顺序例:火车调度,一条轨道上(资源)跑尽量多的车(事务),处理”多快”、”正点”和”安全”的矛盾调度例令T1

从A转账$50到B,T2从A转账余额的10%到B,下列是一个串行调度(教材中的Schedule1),先T1

后T2调度例令T1

与T2

如前定义,下列调度(教材中的Schedule3)不是串行调度,但与Schedule1等价.

Schedule1和3都保持和A+B调度例下列并发调度(教材中的Schedule4)未能保持和A+B.

可串行化基本假定:每个事务都保持数据库的一致性故一组事务的串行执行也保持数据库的一致性一个(并发)调度是可串行化的当且仅当它与一个串行调度等价不同形式的调度等价定义(冲突等价和观察等价)导致不同的可串行化概念:1. 冲突可串行化2. 观察可串行化我们忽略除read和write之外的操作操作,并且假设在读和写之间事务对局部缓冲区内的数据可以执行任意的计算

简化的调度只包含read与write操作冲突可串行化事务Ti

和Tj的操作li

和lj

冲突

当且仅当

存在li

和lj都存取的数据项Q,且至少有一条写Q

的操作 1.li=read(Q),lj=read(Q).li

lj

不冲突.

2.li=read(Q),lj=write(Q).冲突

3.li=write(Q),lj=read(Q).冲突

4.li=write(Q),lj=write(Q).冲突直观地,li

与lj

之间的冲突强制要求它们之间要有一个(逻辑上的)时间顺序如果li

lj

在一个调度中是连续的且不冲突,则即使交换其顺序也会保持相同结果冲突操作的直观解释两人共同欣赏一幅画,谁先谁后,看的东西都一样,不冲突,但如其中一个要改画,先后次序就至关紧要了例如:东坡题字,顽童涂鸦,乾隆御览(文物)东坡题字,乾隆御览,顽童涂鸦(废物)他们有公共对象而互不干扰(因而可换序不影响结果)或其中有一个写共同对象,称为冲突冲突可串行化(续)若调度S

通过一系列交换非冲突操作可转换成调度S´,则称S

与S´冲突等价若调度S

与一个串行调度冲突等价,则称调度S是冲突可串行化的非冲突可串行化调度例: T3

T4

read(Q)

write(Q)

write(Q)

不可能通过交换上面这个调度的操作而得到串行调度<T3,T4>或<T4,T3>冲突可串行化通过一系列交换非冲突操作,下面的Schedule3可转换成串行调度<T1,T2>(Schedule1)因此Schedule3是冲突可串行化的

观察可串行化令S

与S´

是相同事务集合的两个调度.S

和S´

称为

观察等价当且仅当满足下列三个条件:1. 对每个数据项Q,

如果在调度S中事务Ti

读到Q

的初始值,则在调度S´中事务Ti

也必须读到Q

的初始值2. 对每个数据项Q,

如果在调度S中事务Ti

执行了read(Q),而该值是由事务Tj产生的,则在调度S´中事务Ti

也必须读到由事务Tj产生的Q值3. 对每个数据项Q,

在调度S中执行最后一条write(Q)的事务在调度S´中也必须执行最后一条write(Q)显然,观察等价也是纯粹基于read和write的观察可串行化(续)如果调度S

观察等价于一个串行调度,则称之为观察可串行化的推论:每个冲突可串行化的调度也是观察可串行化的教材中的Schedule9—观察可串行化但非冲突可串行化的调度

每个观察可串行化而非冲突可串行化的调度必有盲写(blindwrite),即未执行读操作可串行化的其他概念教材中的Schedule8可产生与串行调度<T1,

T5>相同的结果,但两者既不是冲突等价的也不是观察等价的

确定这种等价性需要分析读写之外的操作可恢复性可恢复调度

:若事务Tj

读事务Ti先前写过的数据项,则的Ti提交操作出现在Tj的提交操作之前下列调度(Schedule11)不是可恢复的,如果T9

在读操作后立即提交

如果T8

夭折,T9

则读了一个数据库的不一致状态(并可能将结果显示给了用户)因此,数据库必须确保调度是可恢复的考虑事务失败对并发执行的事务的影响可恢复性

级联回滚:单个事务失败导致一系列事务回滚,考虑下列调度,其中没有事务已提交(因此该调度是可恢复的)

若T10

失败,T11

和T12

也必须回滚导致大量工作的取消可恢复性无级联回滚调度:不会发生级联回滚对每一对事务Ti

与Tj,若Tj

读取Ti先前写过的数据项,则Ti

的提交操作必须出现在Tj的读操作之前每个无级联回滚调度也是可恢复的调度有必要将调度限制为无级联回滚调度隔离性的实现为保证数据库的一致性,调度必须是冲突或观察可串行化的,可恢复的,并且最好是无级联回滚的一次只允许一个事务执行的策略产生的都是串行调度,但并发度太差并发控制方案需要在它所允许的并发程度与带来的开销之间进行折衷某些方案只允许产生冲突可串行化的调度,而另一些则允许非冲突可串行化但观察可串行化的调度SQL中的事务定义数据操纵语言必须包含用来说明组成事务的操作集合的构造在SQL标准中,事务开始是隐式的在SQL中事务的结束是通过:Commitwork提交当前事务并开始一个新事务Rollbackwork导致当前事务夭折SQL-92中的一致性级别:Serializable(缺省)RepeatablereadReadcommittedReaduncommittedSQL-92中的一致性级别Serializable:缺省级别Repeatableread:只能读已提交记录,并且对同一记录的重复读必须返回相同值(即其间不允许其他事务更新该记录).然而,事务可能不是可串行化的–它可能读到一些被另一已提交事务插入的记录Readcommitted:只能读已提交记录,但对记录的重复读可能返回不同值Readuncommitted:可能读到未提交的记录较低级别的一致性对获得数据库的近似信息是有用的,如用于查询优化的统计信息检测可串行化考虑事务集合T1,T2,...,Tn的某个调度优先图

—以事务为顶点的一种有向图如果两事务Ti

和Tj冲突并且Ti

较早存取引起冲突的数据项,则从Ti

到Tj

画弧可以用被存取的数据项标记弧例1xy调度例(ScheduleA)

T1 T2 T3 T4 T5

read(X)

read(Y)

read(Z)

read(V)

read(W)

read(W)

read(Y)

write(Y)

write(Z)

read(U)

read(Y)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论