资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
第11页 / 共36页
第12页 / 共36页
第13页 / 共36页
第14页 / 共36页
第15页 / 共36页
第16页 / 共36页
第17页 / 共36页
第18页 / 共36页
第19页 / 共36页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章 并发控制,第七章 并发控制,1,并发控制,干扰问题,解决干扰封锁,封锁不当死锁,封锁与隔离级别,并发控制 干扰问题,2,干扰问题,丢失更新问题,未提交依赖问题,不一致分析问题,幻象读问题,干扰问题 丢失更新问题,3,丢失更新问题,例:,旅客,A,来到,A,售票处,要买一张,15,日北京到上海的,13,次直达快速列车的软卧车票,售票员,A,(下称用户,A,)在终端,A,查看剩余票信息;,几乎在同时,旅客,B,来到,B,售票处,也要买一张,15,日北京到上海的,13,次直达快速列车的软卧车票,售票员,B,(下称用户,B,)从终端,B,查到了同样的剩余票信息;,旅客,A,买了一张,15,日,13,次,7,车厢,5,号下铺的软卧票,用户,A,更新剩余票信息并将它存入数据库;,这时用户,B,不知道用户,A,已经将,15,日,13,次,7,车厢,5,号下铺的软卧票卖出,使旅客,B,也买了一张,15,日,13,次,7,车厢,5,号下铺的软卧票,用户,B,更新剩余票信息并将它存入数据库(重复了用户,A,已经做过的更新)。,总的效果:,15,日,13,次,7,车厢,5,号下铺的软卧票卖了两次。其原因是:允许了用户,B,在过时的信息基础上去更新数据库,而没有迫使他去看最新的信息。,丢失更新问题 例:总的效果:15日13次7车厢5号下铺的软卧,4,丢失更新问题,用,SQL,术语描述丢失更新问题,丢失更新问题 用SQL术语描述丢失更新问题,5,未提交依赖问题,未提交依赖问题也称为读“脏”(,Dirty Read,)数据问题,查询一个已经被其他事务更新、但尚未提交的元组,将会引起未提交依赖问题。,未提交依赖问题 未提交依赖问题也称为读“脏”(Dirty R,6,不一致分析问题,不一致分析问题也称为不可重复读问题,很多应用可能需要校验功能,这时往往需要连续两次或多次读数据进行校验和分析,结果由于其他事务的干扰,使得前后结果不一致,从而产生校验错误(即不一致的分析)。,不一致分析问题 不一致分析问题也称为不可重复读问题,很多应用,7,幻象读问题,幻象读问题与不一致分析问题有关,当事务,A,读数据时,事务,B,在对同一个关系进行插入或删除操作,这时事务,A,再读同一条件的元组时,会发现神秘地多出了一些元组或丢失了一些元组,把这种现象称作幻象读。,幻象读问题 幻象读问题与不一致分析问题有关,当事务A读数据时,8,封锁,封锁的基本技术,封锁机制,SQL Server,中与封锁有关的命令,封锁粒度,意向锁,封锁 封锁的基本技术,9,封锁的基本技术,当需要查询或更新数据时,先对数据进行封锁,以避免来自其他事务的干扰。针对不同的干扰问题可以有不同的封锁机制。,以丢失更新问题为例,实施封锁的基本思想是:当一个用户对一个表或记录进行更新时,封锁该表或记录,使其他用户不能在同一时刻更新相同的表或记录,迫使其他用户在更新后的基础上(而不是在更新前的基础上)再实施另外的更新操作。,封锁的基本技术当需要查询或更新数据时,先对数据进行封锁,以避,10,封锁的基本技术,实施封锁以后的时间序列,封锁的基本技术实施封锁以后的时间序列,11,封锁机制,共享封锁,独占封锁,更新封锁,有些封锁在执行完相应操作后就自动释放封锁,有些封锁则保持到事务结束(提交或撤消)时才释放(无论如何,所有的封锁都会在事务结束时自动释放)。,封锁机制 共享封锁 有些封锁在执行完相应操作,12,共享封锁,共享封锁是为读操作设置的一种封锁,所以也称作读封锁,或简称,S,锁,目的是想读到一组不变的数据,也就是在读数据的过程中,不允许其他用户对该数据进行任何修改操作。这种封锁可以保证最大的并发性,任何数量的用户都可以同时对同样的数据施加这种共享锁。已经实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁。,共享封锁 共享封锁是为读操作设置的一种封锁,所以也称作读封锁,13,独占封锁,独占封锁也叫排他封锁,它是为修改操作设置的一种封锁,也称为写封锁,或简称为,X,锁,这是最严格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。已经实施独占封锁的表,拒绝来自其他用户的任何封锁,但不拒绝一般的查询操作。,独占封锁 独占封锁也叫排他封锁,它是为修改操作设置的一种封锁,14,更新封锁,当需要对一个记录或一组记录进行更新时(只是修改,不包括插入和删除)使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改同一记录。已经实施更新封锁的记录,拒绝来自其他用户的任何封锁,但不拒绝一般的查询操作。,更新封锁 当需要对一个记录或一组记录进行更新时(只是修改,不,15,SQL Server,中与封锁有关的命令,SQL Server,的封锁操作是在相关语句的“,WITH(),”子句中完成的,该短语可以在,SELECT,、,INSERT,、,UPDATE,和,DELETE,等语句中指定表级锁定的方式和范围。,SQL Server中与封锁有关的命令 SQL Server,16,SQL Server,中与封锁有关的命令,常用的封锁关键词有:,TABLOCK:,对表施行共享封锁,在读完数据后立刻释放封锁,此类封锁可以避免读“脏”数据,但不具有可重复读的特性。,HOLDLOCK:与TABLOCK一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放锁,这样可以保证数据的可重复独特性。,NOLOCK:不进行封锁,此关键词仅应用于SELECT语句,这样可能会读取未提交事务的数据,即有可能发生“脏”读。,TABLOCKX:对表实施独占封锁。,UPDLOCK:对表中的指定元组实施更新封锁;这时其他事务可以对同一表中的其他元组也实施更新封锁,但是不允许对表实施共享封锁和独占封锁。,SQL Server中与封锁有关的命令常用的封锁关键词有:,17,SQL Server,中与封锁有关的命令,DECLARE d datetime,t char(6),s char(2),n char(10),BEGIN TRANSACTION,SELECT n=,座位号,FROM R WITH(UPDLOCK),WHERE,日期,=d AND,车次,=t AND,座别,=s AND,状态,IS NULL,IF,UPDATE R SET,状态,=Y,WHERE,座位号,=n AND,日期,=d AND,车次,=t AND,座别,=s,COMMIT TRANSACTION,ELSE,ROLLBACK TRANSACTION,SQL Server中与封锁有关的命令,18,封锁粒度,封锁的对象可以是表、也可以是元组等,我们把封锁对象的大小称为封锁粒度(,Granularity,)。,封锁的对象可以是逻辑单元(如表和元组等),也可以是物理单元(如数据页和数据块等)。,数据库管理系统一般都具有多粒度锁定功能,允许一个事务锁定不同类型的资源。,封锁粒度 封锁的对象可以是表、也可以是元组等,我们把封锁对象,19,封锁粒度,锁定在较小的粒度(例如行)可以增加并发操作的性能,但系统开销也较大。这是因为如果封锁的粒度小,则意味着需要的锁多,从而需要系统控制更多的锁。,锁定在较大的粒度(例如表)会降低操作的并发性,这是因为锁定整个表限制了其他事务对表中任意部分进行访问。封锁粒度大,则不需要太多的封锁,由于需要维护的锁较少,所以系统开销较低。,封锁粒度锁定在较小的粒度(例如行)可以增加并发操作的性能,但,20,意向锁,为了降低封锁的成本,提高并发的性能,数据库管理系统还支持一种意向锁(,Intention Lock,)。,意向锁表示一种封锁意向,当需要在某些底层资源上(如元组)获取封锁时,可以先对高层资源(如表)实施意向锁。例如,在表级实施共享意向锁表示事务打算在表中的元组上实施共享锁,这样做可以防止另一个事务随后在同样的资源上获取排它锁。意向锁可以提高性能,因为系统仅在表级检查意向锁来确定事务是否可以安全地获取该表上的锁;而无须检查表中的每个元组上的锁,以确定事务是否可以锁定整个表。,意向锁 为了降低封锁的成本,提高并发的性能,数据库管理系统还,21,意向锁,意向共享(,IS,),意向排它(,IX,),共享意向排它(,SIX,),意向锁意向共享(IS),22,意向共享(,IS,),通过在各资源上放置,IS,锁,表明事务的意向是读取层次结构中的部分(而不是全部)底层资源。,例如,对表实施,IS,锁,则意味着要对表中的某个(些)元组实施,S,锁;,或者说,当需要对表中的某个(些)元组实施,S,锁时,应该首先对表实施,IS,锁。,意向共享(IS)通过在各资源上放置IS锁,表明事务的意向是,23,意向排它(,IX,),通过在各资源上放置,IX,锁,表明事务的意向是修改层次结构中的部分(而不是全部)底层资源。,例如,对表实施,IX,锁,则意味着要对表中的某个(些)元组实施,X,锁;,或者说,当需要对表中的某个(些)元组实施,X,锁时,应该首先对表实施,IX,锁。,意向排它(IX)通过在各资源上放置IX锁,表明事务的意向是,24,共享意向排它(,SIX,),通过在各资源上放置,SIX,锁,表明事务的意向是读取层次结构中的全部底层资源并修改部分(而不是全部)底层资源。,SIX,锁等同于加,S,锁、再加,IX,锁。,例如,对表实施,SIX,锁,则意味着要对表实施,S,锁,并对表中的某个(些)元组实施,X,锁;,或者说,当需要对表实施,S,锁,并对表中的某个(些)元组实施,X,锁时,应该首先对表实施,SIX,锁。,共享意向排它(SIX)通过在各资源上放置SIX锁,表明事务,25,死锁,产生死锁的原因,避免死锁,发现死锁,解决死锁,死锁 产生死锁的原因,26,产生死锁的原因,右图示意了两个并发事务所发生事件的序列,假设程序,A,为了完成某个事务需要封锁仓库和职工两个关系,而几乎在同一时刻并发执行的程序,B,为完成另一个事务也需要封锁职工和仓库关系,这两个程序正好按照如图所示的交错序列执行命令,结果两个程序都为了等待对方释放数据资源而产生死锁。,产生死锁的原因右图示意了两个并发事务所发生事件的序列,假设程,27,避免死锁,相同顺序法,所有的用户程序约定都按相同的顺序来封锁表,一次封锁法,为了完成一个事务,一次性封锁所需要的全部表,两阶段封锁协议,所有事务都必须将对数据的封锁分为封锁和释放两个阶段,避免死锁 相同顺序法,28,避免死锁的封锁,避免死锁的封锁,29,两阶段封锁协议,第一阶段称为扩展阶段,这一阶段获得各种类型的封锁,但是不能释放任何封锁。,第二阶段称为收缩阶段,这一阶段释放各种类型的封锁,一旦开始释放封锁,则不能再申请任何类型的封锁。,注意,两阶段封锁协议和一次封锁法的异同之处。一次封锁法遵守两阶段封锁协议;但是两阶段封锁协议并不要求一次封锁所有需要封锁的数据。两阶段封锁协议仍有可能发生死锁。,两阶段封锁协议 第一阶段称为扩展阶段,这一阶段获得各种类型的,30,发现死锁,超时法,即一个事务在等待的时间超过了规定的时限后就认为发生了死锁。,这种方法非常不可靠,如果设置的等待时限长,则不能及时发现死锁;如果设置的等待时限短,则可能会将没有发生死锁的事务误判为死锁。,发现死锁超时法,31,发现死锁,等待图法,即通过有向图判定事务是否是可串行化的,如果是则说明没有发生死锁,否则说明发生了死锁。,具体思路是:用节点来表示正在运行的事务,用有向边来表示事务之间的等待关系,如右图所示,如果有向图中发现回路,则说明发生了死锁。,发现死锁等待图法,32,解决死锁,发现死锁后解决死锁的一般策略是:自动使“年轻”的事务(即完成工作量少的事务)先退回去,然后让“年老”的事务(即完成工作量多的事务)先执行,等“年老”的事务完成并释放封锁后,“年轻”的事务再重新执行。,解决死锁发现死锁后解决死锁的一般策略是:自动使“年轻”的事务,
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6