事务管理与并控制课件_第1页
事务管理与并控制课件_第2页
事务管理与并控制课件_第3页
事务管理与并控制课件_第4页
事务管理与并控制课件_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、事务管理与并发控制课件第9章 事务管理与并发控制 事务管理与并发控制课件事务的概念(1.7)事务的概念事务的性质事务管理的基本命令事务管理与并发控制课件事务举例事务是构成单一逻辑工作单元的操作集合。l买卖交易一手交钱一手交货l订票查询、订位、(交钱)、出票(往返票?)l转帐转出、转入事务管理与并发控制课件为什么需要事务的概念呢?恢复的需要并发操作的需要l买卖交易一手交钱一手交货l订票查询、订位、(交钱)、出票(往返票?)l转帐转出、转入事务管理与并发控制课件James Gray1998年获得图灵奖在数据库技术、特别是事务处理方面做出了杰出贡献。解决了诸如完整性、安全性、并发控制等一系列技术难题

2、。事务管理与并发控制课件事务的性质 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation)持久性(Durability) 事务的这些性质通常称为ACID特性 事务管理与并发控制课件原子性 事务的原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。一个事务所包含的操作要么全部做,要么全部不做。l买卖交易一手交钱一手交货l订票查询、订位、(交钱)、出票(往返票?)l转帐转出、转入 事务管理与并发控制课件一致性 一个事务执行一项数据库操作,事务将使数据库从一种一致性的状态变换成另一种一致性状态。 在事务执行前,总是假设数据库是一致的,那么当事务成功

3、执行后,数据库肯定仍然是一致的。 l买卖交易一手交钱一手交货l订票查询、订位、(交钱)、出票(往返票?)l转帐转出、转入(帐目平衡)事务管理与并发控制课件隔离性 如果每个事务单独执行能保持原子性和一致性,这些事务并发执行也能保持原子性和一致性,则是事务的隔离性。l并发记帐?事务管理与并发控制课件持久性 事务的持久性是指一旦事务成功完成,该事务对数据库所施加的所有更新都是永久的。l在ATM取钱后银行系统突然发生故障? 事务管理与并发控制课件ACID性质DBMS的功能如果让用户程序来实现结果会怎样?事务管理与并发控制课件事务的生命周期事务的结束提交(Commit)或者撤销(Rollback)事务在

4、活动中的状态l活动状态事务初始时l部分提交状态命令执行完、但未提交l失败状态发现正常操作不能进行l撤销状态撤销事务,恢复到事务前的状态l提交状态成功完成后事务管理与并发控制课件事务的生命周期命令执行完只要事务没有提交事务就没有结束,还有可能转变到失败状态。活动状态失败状态提交状态撤销状态部分提交状态事务管理与并发控制课件SQL对事务的支持 开始事务 结束事务 事务保存点 隐含事务与自动提交 事务管理与并发控制课件开始事务 使用BEGIN TRANSACTION命令显式说明一个事务开始,它说明了对数据库进行操作的一个单元的起始点。在事务完成之前出现任何操作错误和故障,都可以撤销事务,使事务回退到

5、这个起始点。 事务管理与并发控制课件结束事务 结束事务有两种情况,即成功或失败:l成功结束事务的命令是COMMIT TRANSACTION,它的作用是提交或确认事务已经完成,所以该命令也称作事务提交。 l失败的事务需撤销,撤消事务的命令是ROLLBACK TRANSACTION,即撤消在该事务中对数据库所做的更新操作,使数据库回退到事务的起始点。 事务管理与并发控制课件举例:如下程序的结果?BEGIN TRANSACTIONCREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3)INSERT INTO TestTran VALUES (

6、1, aaa)COMMIT TRANSACTIONBEGIN TRANSACTIONINSERT INTO TestTran VALUES (2, bbb)ROLLBACK TRANSACTIONBEGIN TRANSACTIONINSERT INTO TestTran VALUES (3, ccc)COMMIT TRANSACTION事务管理与并发控制课件事务保存点 SQL标准还支持“事务保存点”技术,所谓事务保存点就是在事务的过程中插入若干标记,这样当发现事务中有操作错误时,可以不撤消整个事务,只撤消部分事务,即将事务回退到某个事务保存点。 事务管理与并发控制课件事务保存点SQL Serv

7、er支持事务保存点技术,设置保存点的命令是SAVE TRANSACTION,具体格式是: SAVE TRANSACTION savepoint_name撤消部分事务或回退到事务保存点的命令也是ROLLBACK TRANSACTION,具体格式是: ROLLBACK TRANSACTION savepoint_name事务管理与并发控制课件假设有订票事务每个中间结点都可以当做一个保存点。北京西安成都兰州昆明银川呼市北京事务管理与并发控制课件举例:如下程序执行的结果?BEGIN TRANSACTIONCREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb

8、 CHAR(3)INSERT INTO TestTran VALUES (1, aaa)SAVE TRANSACTION transpoint1INSERT INTO TestTran VALUES (2, bbb)ROLLBACK TRANSACTION transpoint1INSERT INTO TestTran VALUES (3, ccc)COMMIT TRANSACTION事务管理与并发控制课件隐含事务与自动提交事务的执行模式显式事务隐式事务自动提交事务事务管理与并发控制课件显式事务用BEGIN TRANSACTION命令开始一个事务直到用COMMIT或ROLLBACK命令结束事务

9、事务管理与并发控制课件隐式事务当执行如下命令时都会自动开始一个事务lALTER,INSERT,CREATE,OPEN,DELETE,REVOKE、DROP、SELECT、FETCH、GRANT、UPDATE直到用COMMIT或ROLLBACK命令结束事务,然后又准备开始一个新的事务。事务管理与并发控制课件自动提交事务每条单独的语句都是一个事务,一条语句执行成功则提交事务,执行失败则撤销事务。事务管理与并发控制课件隐含事务与自动提交事务的执行模式 SQL标准规定事务的开始是隐含的,在发出COMMIT(提交事务)或ROLLBACK(撤消事务)命令之前,该事务将一直保持有效。一个事务被提交或撤消之后

10、,又将自动启动下一个新事务。 事务管理与并发控制课件隐含事务的设置与取消设置隐含事务方式的命令是: SET IMPLICIT_TRANSACTIONS ON取消隐含事务方式的命令是: SET IMPLICIT_TRANSACTIONS OFF事务管理与并发控制课件隐含事务与自动提交当 是 隐 含 事 务 方 式 时 , 不 需 要 用 B E G I N TRANSACTION命令显式的启动或开始一个事务,但需要用COMMIT或ROLLBACK命令结束事务;当是非隐含事务方式时,如果没有用BEGIN TRANSACTION命令显式的启动或开始一个事务,则每条操作数据库的语句都将作为独立的事务被

11、自动提交或撤消,这时候不需要、也不能执行COMMIT或ROLLBACK命令。事务管理与并发控制课件思考题UPDATE score SET 成绩=成绩 + 5如果score表有1000条记录,这条语句在完成更新时只有1条记录违背了完整性约束,结果会怎么样?事务管理与并发控制课件隐含事务举例 SET IMPLICIT_TRANSACTIONS ONINSERT INTO 仓储.仓库 VALUES(WH20,成都,888)COMMITINSERT INTO 仓储.仓库 VALUES(WH21,重庆,888)ROLLBACK结果?事务管理与并发控制课件非隐含事务与自动提交举例 SET IMPLICIT

12、_TRANSACTIONS OFFINSERT INTO 仓储.仓库 VALUES(WH21,重庆,888)ROLLBACK结果?事务管理与并发控制课件显式事务举例 SET IMPLICIT_TRANSACTIONS OFFBEGIN TRANSACTIONINSERT INTO 仓储.仓库 VALUES(WH23,贵阳,888)ROLLBACK结果?事务管理与并发控制课件使用TRYCATCH控制事务 BEGIN TRY BEGIN TRANSACTION - 假设事务的所有语句成功执行则提交事务 COMMIT TRANSACTIONEND TRYBEGIN CATCH - TRY语句块中出现

13、错误则转到此 - 检测错误并做出处理END CATCH事务管理与并发控制课件TRYCATCH举例SET XACT_ABORT ONBEGIN TRY BEGIN TRANSACTION INSERT INTO 仓储.仓库 VALUES(WH17,成都,332) INSERT INTO 仓储.仓库 VALUES(WH17,贵阳,380) COMMIT TRANSACTIONEND TRYBEGIN CATCH IF (XACT_STATE() = -1 BEGIN PRINT N事务不能提交,撤销事务! ROLLBACK TRANSACTION ENDEND CATCH事务管理与并发控制课件并发

14、控制干扰问题可串行性封锁死锁“活死锁”隔离级别封锁与隔离级别事务管理与并发控制课件并发事务中的不一致问题干扰问题丢失更新问题 未提交依赖问题 不一致分析问题 幻象读问题 事务管理与并发控制课件丢失更新问题举例(假设) 旅客A 通过网络购票,要买一张15日北京南到上海虹桥的G1次高速列车的一等座车票,旅客A得到剩余票信息; 几乎在同时,旅客B 也通过网络购票,也要买一张15日北京南到上海虹桥的G1次高速列车的一等座车票, 用户B从另一台计算机查到了同样的剩余票信息; 旅客A买了一张15日G1次7车厢5号车票,旅客A提交订单、系统更新剩余票信息并将它存入数据库; 这时旅客B不知道旅客A已经购买了1

15、5日G1次7车厢5号车票,使旅客B也也提交了一张15日G1次7车厢5号车票,系统再次更新剩余票信息并将它存入数据库(重复了旅客A提交订单时已经做过的更新)。 总的效果:15日G1次7车厢5号车票卖了两次。其原因是:允许了旅客B在过时的信息基础上去更新数据库,而没有迫使他去看最新的信息。 事务管理与并发控制课件丢失更新问题 用SQL术语描述丢失更新问题事务管理与并发控制课件未提交依赖问题 未提交依赖问题也称为读“脏”(Dirty Read)数据问题,查询一个已经被其他事务更新、但尚未提交的元组,将会引起未提交依赖问题。 事务管理与并发控制课件不一致分析问题 不一致分析问题也称为不可重复读问题,很

16、多应用可能需要校验功能,这时往往需要连续两次或多次读数据进行校验和分析,结果由于其他事务的干扰,使得前后结果不一致,从而产生校验错误(即不一致的分析)。 事务管理与并发控制课件幻象读问题 幻象读问题与不一致分析问题有关,当事务A读数据时,事务B在对同一个关系进行插入或删除操作,这时事务A再读同一条件的元组时,会发现神秘地多出了一些元组或丢失了一些元组,把这种现象称作幻象读。 事务管理与并发控制课件可串行性 可串行性通常看作是多个事务并发执行的正确性准则。如果多个事务并发执行和这些事务按某种顺序串行执行的效果是等价的,称作并发事务的可串行性或可串行化。事务管理与并发控制课件可串行性的判断各单个事

17、务如能将数据库从一个正确状态转变为另一个正确状态,则认为该事务是正确的;按任何一个串行顺序依次执行多个事务也是正确的(这里的串行顺序假定各个事务间彼此独立、不交叉); 事务的交叉执行过程是正确的,当且仅当其与串行执行过程等价,则事务是可串行化的。 可串行性描述的是事务的隔离性。事务管理与并发控制课件并发控制隔离性是事务的基本特征。在数据库中当有多个事务并发执行时,由于事务之间操作的相互干扰,事务的隔离性可能不能保证,从而导致对数据库一致性的破坏。为了保持事务的隔离性,系统必须能够对并发事务之间的相互作用加以控制,这就是并发控制。事务管理与并发控制课件实现并发控制(隔离性)的基本思路事务管理与并

18、发控制课件实现隔离性的基本思路当需要查询或更新数据时,先对数据进行封锁,以避免来自其他事务的干扰,即隔离其他事务。针对不同的干扰问题可以有不同的封锁机制。 以丢失更新问题为例,实施封锁的基本思想是:当一个用户对一个表或记录进行更新时,封锁该表或记录,使其他用户不能在同一时刻更新相同的表或记录,迫使其他用户在更新后的基础上(而不是在更新前的基础上)再实施另外的更新操作。 事务管理与并发控制课件封锁的基本思路实施封锁以后的时间序列事务管理与并发控制课件封锁与事务吞吐量事务吞吐量:单位时间内可以完成的事务数量。封锁将降低事务吞吐量。如何在保证事务隔离性的前提下提高事务吞吐量?事务管理与并发控制课件如

19、何在保证事务隔离性的前提下提高事务吞吐量必要的封锁策略。根据不同的需要采取不同的封锁策略。事务管理与并发控制课件封锁机制 共享封锁 独占封锁 更新封锁 事务管理与并发控制课件共享封锁 共享封锁是为读操作设置的一种封锁,所以也称作读封锁,或简称S锁,目的是想读到一组不变的数据,也就是在读数据的过程中,不允许其他用户对该数据进行任何修改操作。这种封锁可以保证最大的并发性,任何数量的用户都可以同时对同样的数据施加这种共享锁。已经实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁。 事务管理与并发控制课件独占封锁 独占封锁也叫排他封锁,它是为修改操作设置的一种封锁,也称为写封锁,或简称为X锁,这是最严

20、格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。已经实施独占封锁的表,拒绝来自其他用户的任何封锁,但不拒绝一般的查询操作。 事务管理与并发控制课件共享封锁和独占封锁是基本锁共享封锁和共享封锁是相容的;独占封锁与任何封锁均不相容。事务管理与并发控制课件更新封锁 当需要对一个记录或一组记录进行更新时(只是修改,不包括插入和删除)使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改同一记录。已经实施更新封锁的记录,拒绝来自其他用户的任何封锁,但不拒绝一般的查询操作。 事务管理与并发控制课件锁的释放 有些封锁在执行完相应操作后就自动释放封锁,有些封锁则保持到事务结束(提交或撤消

21、)时才释放(无论如何,所有的封锁都会在事务结束时自动释放)。 事务管理与并发控制课件SQL Server中与封锁有关的命令 SQL Server的封锁操作是在相关语句的“WITH ()”子句中完成的,该短语可以在SELECT、INSERT、UPDATE和DELETE等语句中指定表级锁定的方式和范围。事务管理与并发控制课件SQL Server中与封锁有关的命令常用的封锁关键词有:lTABLOCK:对表施行共享封锁,在读完数据后立刻释放封锁,此类封锁可以避免读“脏”数据,但不具有可重复读的特性。 lHOLDLOCK:与TABLOCK一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放锁,

22、这样可以保证数据的可重复独特性。 lNOLOCK:不进行封锁,此关键词仅应用于SELECT语句,这样可能会读取未提交事务的数据,即有可能发生“脏”读。 lTABLOCKX:对表实施独占封锁。 lUPDLOCK:对表中的指定元组实施更新封锁;这时其他事务可以对同一表中的其他元组也实施更新封锁,但是不允许对表实施共享封锁和独占封锁。 事务管理与并发控制课件举例DECLARE d datetime, t char(6), s char(2), n char(10)BEGIN TRANSACTIONSELECT n=座位号 FROM R WITH (UPDLOCK)WHERE 日期 = d AND 车

23、次 = t AND 座别 = s AND 状态 IS NULLIF UPDATE R SET 状态 = Y WHERE 座位号 = n AND 日期 = d AND 车次 = t AND 座别 = sCOMMIT TRANSACTIONELSEROLLBACK TRANSACTION事务管理与并发控制课件死锁 封锁不当会产生死锁事务管理与并发控制课件产生死锁的原因右图示意了两个并发事务所发生事件的序列,假设程序A为了完成某个事务需要封锁仓库和职工两个关系,而几乎在同一时刻并发执行的程序B为完成另一个事务也需要封锁职工和仓库关系,这两个程序正好按照如图所示的交错序列执行命令,结果两个程序都为了等

24、待对方释放数据资源而产生死锁。 事务管理与并发控制课件发生死锁两个或多个事务等待被封锁资源形成环路时就会发生死锁。ABC事务管理与并发控制课件避免死锁事务管理与并发控制课件避免死锁 相同顺序法 l所有的用户程序约定都按相同的顺序来封锁表 一次封锁法 l为了完成一个事务,一次性封锁所需要的全部表 两阶段封锁协议 l所有事务都必须将对数据的封锁分为封锁和释放两个阶段 事务管理与并发控制课件避免死锁的封锁 事务管理与并发控制课件两阶段封锁协议 第一阶段称为扩展阶段,这一阶段获得各种类型的封锁,但是不能释放任何封锁。第二阶段称为收缩阶段,这一阶段释放各种类型的封锁,一旦开始释放封锁,则不能再申请任何类

25、型的封锁。 注意,两阶段封锁协议和一次封锁法的异同之处。一次封锁法遵守两阶段封锁协议;但是两阶段封锁协议并不要求一次封锁所有需要封锁的数据。两阶段封锁协议仍有可能发生死锁。 事务管理与并发控制课件发现死锁超时法 l即一个事务在等待的时间超过了规定的时限后就认为发生了死锁。 l这种方法非常不可靠,如果设置的等待时限长,则不能及时发现死锁;如果设置的等待时限短,则可能会将没有发生死锁的事务误判为死锁。 事务管理与并发控制课件发现死锁等待图法 l即通过有向图判定事务是否是可串行化的,如果是则说明没有发生死锁,否则说明发生了死锁。l具体思路是:用节点来表示正在运行的事务,用有向边来表示事务之间的等待关

26、系,如右图所示,如果有向图中发现回路,则说明发生了死锁。 事务管理与并发控制课件解决死锁发现死锁后解决死锁的一般策略是:自动使“年轻”的事务(即完成工作量少的事务)先退回去,然后让“年老”的事务(即完成工作量多的事务)先执行,等“年老”的事务完成并释放封锁后,“年轻”的事务再重新执行。 事务管理与并发控制课件“活锁”没有发生死锁也有可能某个事务永远处于等待状态事务管理与并发控制课件“活锁”T1:事务A共享封锁资源S,成功T2:事务B试图独占封锁资源S,等待T3:事务C在A释放封锁S之前,共享封锁S成功T4:事务D在C释放封锁S之前,共享封锁S成功结果事务B无限期等待事务管理与并发控制课件避免“

27、活锁”事务管理与并发控制课件避免“活锁”按队列实施封锁lT1:事务A共享封锁资源SlT2:事务B试图独占封锁资源S,等待lT3:事务C在A释放封锁S之前申请对S的共享封锁,由于事务B已经在等待S,所以事务C排队等待事务管理与并发控制课件封锁与隔离级别封锁的目的是隔离事务,保证事务之间不互相干扰;不同的封锁机制和事务管理方式实际对应着不同的隔离级别。隔离级别可划分为:l未提交读l提交读l可重复读l可串行化事务管理与并发控制课件未提交读( READ UNCOMMITTED )事务隔离的最低级别,仅可保证不读取物理损坏的数据,甚至不介意读“脏”数据。对应封锁的NOLOCK,即读之前不加任何封锁。 事

28、务管理与并发控制课件提交读(READ COMMITTED) 默认级别,可以保证不读取“脏”数据。对应TABLOCK封锁,即读之前加共享封锁,读完之后即自动释放封锁。事务管理与并发控制课件可重复读(REPEATABLE READ) 可以保证读一致性,避免不一致分析问题。 对应TABLOCK+HOLDLOCK封锁,即读之前加共享封锁,并将封锁保持到事务结束。事务管理与并发控制课件可串行化(SERIALIZABLE) 事务隔离的最高级别,事务之间完全隔离;如果事务在可串行化隔离级别上运行,则可以保证任何并发重叠事务均是串行的。根据情况对应TABLOCKX或UPDLOCK封锁,保证增、删、改操作不受其

29、他事务干扰。 事务管理与并发控制课件设置隔离级别的命令 SET TRANSACTION ISOLATION LEVEL READ COMMITTED| READ UNCOMMITTED| REPEATABLE READ| SERIALIZABLE 事务管理与并发控制课件封锁与隔离级别 可以通过指定隔离级别或对数据资源实施封锁达到事务隔离的目的;封锁是实现并发操作的传统方法(在SQL标准中没有提及封锁),适当的运用封锁并保证高并发操作性能是一件非常复杂的工作,这需要用户深入了解各种封锁的相容性,并设计封锁的调度策略;SQL标准中规定了事务的隔离级别,即未提交读、提交读、可重复读和可串行化,隔离级别解决了并发事务可能产生的丢失更新问题、未提交依赖问题、不一致分析问题和幻象读问题,其中为了避免丢失更新问题,事务必须运行在可重复读或可串行化隔离级别。 用户可以根据事务的需要设定隔离级别,结果由数据库管理系统控制封锁和进行并发操作调度。 事务管理与并发控制课件封锁与隔离级别在实际应用中,也可以将隔离级别和封锁结合起来使用。例如,如果指定隔离级别是可重

温馨提示

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

评论

0/150

提交评论