数据库事务ppt课件.ppt

上传人:牧羊曲112 文档编号:2157246 上传时间:2023-01-21 格式:PPT 页数:63 大小:5.88MB
返回 下载 相关 举报
数据库事务ppt课件.ppt_第1页
第1页 / 共63页
数据库事务ppt课件.ppt_第2页
第2页 / 共63页
数据库事务ppt课件.ppt_第3页
第3页 / 共63页
数据库事务ppt课件.ppt_第4页
第4页 / 共63页
数据库事务ppt课件.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《数据库事务ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据库事务ppt课件.ppt(63页珍藏版)》请在三一办公上搜索。

1、1,李宁 西北工业大学计算机学院,第十章 并发控制,2,2,第九章内容回顾,本章重点事务的概念和性质事务故障、系统故障和介质故障的恢复技术与原理Redo&Undo本章难点具有检查点的恢复技术,3,3,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,4,4,10.1 并发控制概述,多用户数据库系统银行、票务系统等多事务执行方式事务串行执行交叉并发方式(Interleaved Concurrency)同时并发方式(simultaneous concurrency),本章讨论的数据

2、库系统并发控制技术是以单处理机系统为基础的,5,5,10.1 并发控制概述,事务是并发控制的基本单位并发控制的任务对并发操作进行正确调度保证事务的隔离性保证数据库的一致性,6,6,10.1 并发控制概述,并发操作带来的数据不一致性丢失修改(lost update)-T2提交的结果覆盖了T1提交的结果不可重复读(non-repeatable read)-T1读,T2更新,T1再次读(与第一次读取数据不同)该类错误中还包括:幻读(phantom row)-T1读后,T2删除/插入部分记录,T1再读就不同 脏数据(dirty read)-T1修改写回,T2读,T1回滚,此时T2读数据为脏数据,7,7

3、,10.1 并发控制概述,丢失修改(lost update)-T2提交的结果覆盖了T1提交的结果,8,8,10.1 并发控制概述,不可重复读(non-repeatable read)-T1读,T2更新,T1再次读(与第一次读取数据不同),T1读取B=100进行运算T2读取同一数据B,对其进行修改后将B=200写回数据库T1为了对读取值校对重读B,B已为200,与第一次读取值不一致,9,9,10.1 并发控制概述,幻读(phantom row)-T1读后,T2删除/插入部分记录,T1再读就不同,10,10,10.1 并发控制概述,脏数据(dirty read)-T1修改写回,T2读,T1回滚,此

4、时T2读数据为脏数据,T1将C值修改为200,T2读到C为200T1由于某种原因撤销,其修改作废,C恢复原值100这时T2读到的C为200,与数据库内容不一致,就是“脏”数据,11,11,10.1 并发控制概述,并发控制的主要技术封锁(Locking)时间戳(Timestamp)乐观控制法 多版本并发控制(MVCC),12,12,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,13,13,10.2 封锁,什么是封锁封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向

5、系统发出请求,对其加锁加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。基本封锁类型一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。排它锁(Exclusive lock,简记为X锁,又称为写锁)若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。共享锁(Share lock,简记为S锁,又称为读锁)若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁,14,14,10.2 封锁,锁的相容矩阵,15,15,本章目录,10.1 并

6、发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,16,16,10.3 封锁协议,什么是封锁协议 在运用X锁和S锁对数据对象加锁时,需要约定一些 规则,这些规则为封锁协议(Locking Protocol)。何时申请X锁或S锁持锁时间何时释放不同的规则所形成的各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。一级封锁协议二级封锁协议三级封锁协议,17,17,10.3 封锁协议,一级封锁协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括commit

7、和rollback。注意读数据无需加锁!,可以解决:-修改丢失无法解决:-可重复读-读脏数据,18,18,10.3 封锁协议,二级封锁协议 一级封锁协议+事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。,可以解决:-修改丢失-读脏数据无法解决:-可重复读,19,19,10.3 封锁协议,三级封锁协议 一级封锁协议+事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。,可以解决:-修改丢失-读脏数据-可重复读无法解决:,20,20,10.3 封锁协议,封锁协议小结-各级封锁区别:什么操作需要申请封锁以及何时释放锁-封锁协议级别越高,一致性程度越高,21,21,本章目录,10.

8、1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,22,22,10.4.1 活锁,封锁机制带来的问题死锁活锁,活锁:T1、T2、T3、T4相继申请R的锁,可是T2可能永远处于等待之中。,解决方案:依据请求封锁的先后次序对事务排队,首先批准申请队列中第一个事务获得锁。,23,23,10.4.2 死锁,死锁,T1在等待T2释放R2,而T2又在等待T1释放R1,T1和T2两个事务永远不能结束,形成死锁。,24,24,10.4.2 死锁,解决死锁-预防死锁发生,破坏产生死锁的条件,1.一次封锁法 要求

9、每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。如右图:T1一次对R1和R2加锁引起问题:1.扩大封锁范围,降低系统并发度。2.由于数据的动态性,难以事先精确 确定需要加锁的数据对象-扩大封锁范围,系统并发度 再次降低,25,25,10.4.2 死锁,解决死锁-预防死锁发生,2.顺序封锁法 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。如树结构中,封锁顺序必须是从根节点开始。引起问题:1.维护成本高:-需要封锁的数据对象极多,-随数据的插入、删除等操作而不断地变化。2.难以实现:事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,

10、因此也就很难按规定的顺序去施加封锁。,死锁的预防不太适用,26,26,10.4.2 死锁,解决死锁-死锁的诊断与解除,1.超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。优点:实现简单缺点:-有可能误判死锁-时限若设置得太长,死锁发生后不能及时发现,27,27,10.4.2 死锁,解决死锁-死锁的诊断与解除,2.等待图法 用事务等待图动态反映所有事务的等待情况。,-若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2-定期检测,如果发现该有向图中存在回路,则认为存在死锁,解除死锁:选择一个处理死锁代价最小的事务,将其撤消,释放其所持有的锁,使其它事务能继续运行下去。,

11、28,28,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,29,29,10.5 并发调度的可串行性,什么样的并发操作调度是正确的?并行调度是随机的,不同的调度可能会产生不同的结果。将所有事务串行起来的调度策略一定是正确的调度策略。以不同的顺序串行执行事务也可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可认为是正确的。,可串行化(Serializable)的调度策略:几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。,30,30

12、,10.5.1 可串行性调度,可串行化调度事务T1:读B;A=B+1;写回A事务T2:读A;B=A+1;写回B,A=3B=4,A=4B=3,31,31,10.5.1 可串行性调度,不可串行化调度事务T1:读B;A=B+1;写回A事务T2:读A;B=A+1;写回B,A=3B=3,A=3B=4,32,32,10.5.2 冲突可串行性调度,冲突可串行化调度:判断可串行化的方法之一一个比可串行化更严格的条件商用系统中的调度器采用冲突操作:不同的事务对同一数据的读写操作和写写操作Ri(x)与Wj(x)/*事务Ti读x,Tj写x,其中ij*/Wi(x)与Wj(x)/*事务Ti写x,Tj写x,其中ij*/不

13、同事务的冲突操作是不能交换的,33,33,10.5.2 冲突可串行性调度,冲突可串行化调度一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc,如果Sc是串行的,称调度Sc是冲突可串行化的调度。,调度1,调度2,调度3,调度4,因为调度1等价于一个串行调度T1-T2,所以调度1是一个冲突可串行化的调度。,34,34,10.5.2 冲突可串行性调度,若一个调度是冲突可串行化,则一定是可串行化的调度。,因为Sc2等价于一个串行调度T1-T2,所以Sc1是冲突可串行化的调度。Sc1也是一个可串行化调度。,Sd调度:r1(A)w1(A)r2(A)W2(A)r

14、2(B)w2(B)r1(B)w1(B)是否可串行化?,35,35,10.5.2 冲突可串行性调度,冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。例如:有三个事务,但是调度L2是可串行化的,因为L2执行的结果与调度L1相同,Y的值都等于T2的值,X的值都等于T3的值,如何保证并发操作调度正确性?封锁方法:两段锁协议时标方法乐观方法,36,36,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,37,37,10.6 两段锁协议,“

15、两段”锁的含义(Two-Phase Locking,简称2PL)事务分为两个阶段 1.第一阶段是获得封锁,也称为扩展阶段;事务可以申请获得任何数据项上的任何类型的锁,但 是不能释放任何锁 2.第二阶段是释放封锁,也称为收缩阶段。事务可以释放任何数据项上的任何类型的锁,但是不 能再申请任何锁。,遵守2PL,不遵守2PL,38,38,10.6 两段锁协议,结论:并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。即:(1)所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。(2)事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。(3)可串行化的调度中,不

16、一定所有事务都必须符合两段锁协议。,39,39,10.6 两段锁协议,左图的调度是遵守两段锁协议的,因此一定是一个可串行化调度。如何验证?,40,40,10.6 两段锁协议,两段锁协议与防止死锁的一次封锁法的比较:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。例:遵守两段锁协议的事务发生死锁,41,41,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议

17、10.7 封锁的粒度11.8 小结,42,42,10.7 封锁的粒度,封锁粒度(Granularity)X锁和S锁都是加在 某一个数据对象上封锁粒度即指封锁 对象的大小封锁的对象逻辑单元物理单元,例:在关系数据库中,封锁对象可以是:逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等,43,43,10.7 封锁的粒度,封锁粒度的关系:选择封锁粒度:考虑封锁对象和并发度两个因素,对系统开销与并发度进行权衡。需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;需要处理大量元组的用户事务:以关系为封锁单元;只处理少量元组的用户事

18、务:以元组为封锁单位,44,44,10.7.1 多封锁粒度,多粒度封锁(Multiple Granularity Locking):在一个系统中同时支持多种封锁粒度供不同的事务选择多粒度树:以树形结构来表示多级封锁粒度,根结点是整个数据库,表示最大的数据粒度;叶结点表示最小的数据粒度。,45,45,10.7.1 多封锁粒度,多粒度封锁协议:允许多粒度树中的每个结点被独立地加锁;对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁;在多粒度封锁中一个数据对象可能是显式封锁或者隐式封锁-显式封锁:直接加到数据对象上的封锁-隐式封锁:该数据对象没有独立加锁,是由于其上级结点 加锁而使该数据

19、对象加上了锁,例如:事务T要对关系R1加X锁,需要检查如下的封锁冲突:1.系统必须搜索其上级结点数据库、关系R1 2.还要搜索R1的下级结点,即R1中的每一个元组 3.如果其中某一个数据对象已经加了不相容锁,则T必须等待,46,46,10.7.1 多封锁粒度,对某个数据对象加锁,系统要检查:该数据对象有无显式封锁与之冲突所有上级结点检查本事务的显式封锁是否与该数据对象上的隐式封锁 冲突(由上级结点已加的封锁造成的)所有下级结点看上面的显式封锁是否与本事务的隐式封锁(将加到下 级结点的封锁)冲突,如此检查,效率太低!,意向锁(intention lock),47,47,10.7.2 意向锁,意向

20、锁(intention lock):如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁对任一结点加基本锁,必须先对它的上层结点加意向锁 例如:对任一元组加锁时,必须先对它所在的数 据库和关系加意向锁常用意向锁意向共享锁(Intent Share Lock,简称IS锁)意向排它锁(Intent Exclusive Lock,简称IX锁)共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁),48,48,10.7.2 意向锁,意向共享锁(Intent Share Lock,简称IS锁)表示它的后裔结点拟加S锁 例如:事务T1要对数据库D中的关系R中的某个元组加

21、S锁,则要首先对关系R和数据库D加IS锁意向排它锁(Intent Exclusive Lock,简称IX锁)表示它的后裔结点拟加X锁例如:事务T1要对数据库D中的关系R中的某个元组加X锁,则要首先对关系R和数据库D加IX锁共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁)如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX例如:对某个表加SIX锁,则表示该事务要:-读整个表(所以要对该表加S锁)-同时会更新个别元组(所以要对该表加IX锁),49,49,10.7.2 意向锁,意向锁相容矩阵,50,50,10.7.2 意向锁,锁的强度:锁

22、的强度是指它对其他锁的排斥程度,一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然!,具有意向锁的多粒度封锁方法(广泛应用在DBMS中)申请封锁:自上而下释放封锁:自下而上,例:事务T1要对关系R1加S锁 1.要首先对数据库加IS锁 2.检查数据库和R1是否已加了不相容的锁(X或IX)3.不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁),锁强度偏序关系,51,10.7.3 SQL Server中的并发控制,第一个查询编辑器窗口:begin tranupdate s set sdept=ISwhere sno=95003waitfor delay 00:01:00rollback t

23、ran,sp_lockhttps:/,dbid表示数据库ID:select*from sys.databasesObjid表示对象ID:select*from sysobjects where id=725577623Type:封锁粒度:【DB:数据库、TAB:表、PG:页、EXT:簇、RID:行标等】Status:当前锁状态(GRANT获得、WAIT被其它进程阻塞、CVNT当前锁正在转化)Mode:锁模式(S:共享锁、U:修改锁、X:排它锁、IS共享意图锁、IX排它意图锁)Resource:如果是page时,文件信息:select*from sysfiles 发现page:1:93:表示对第

24、1个文件的第93页加IX锁,查看该页内容dbcc traceon(3604)-将跟踪结果输出的屏幕dbcc page(student,1,93,1)-查看1:93的信息,52,10.7.3 SQL Server中的并发控制,53,不同隔离级别的可能产生的现象,:会出现该现象:表示不会出现该现象,10.7.3 SQL Server中的并发控制,54,1)未提交读第一个查询编辑器窗口:begin tranupdate s set sdept=ISwhere sno=95004-commit tran-rollback tran第二个查询编辑器窗口:set tran isolation level

25、read uncommittedgoselect*from s where sno=95004,脏数据,10.7.3 SQL Server中的并发控制,1.tran1若commit,tran2的结果?2.tran1若rollback,tran2的结果?,55,2)已提交读(SQL Server默认)第一个查询编辑器窗口:begin tranupdate s set sdept=ISwhere sno=95004-commit tran-rollback tran第二个查询编辑器窗口:set tran isolation level read committedgoselect*from s w

26、here sno=95004,10.7.3 SQL Server中的并发控制,tran1若commit或者rollback,tran2将自动进行查询!,56,3)可重复读第一个查询编辑器窗口:set tran isolation level repeatable readgobegin transelect*from supdate s set sdept=CSSwhere sdept=CSselect*from s-rollback tran,第二个查询编辑器窗口:set tran isolation level read committedgobegin traninsert into s

27、values(95005,新人1,男,1985-08-01,CS)select*from s where sno=95005-rollback tran,数据正常插入,57,4)可串行读第一个查询编辑器窗口:set tran isolation level serializablegobegin transelect*from supdate s set sdept=CSSwhere sdept=CSselect*from s-rollback tran,第二个查询编辑器窗口:set tran isolation level read committedgobegin traninsert i

28、nto svalues(95005,新人1,男,1985-08-01,CS)select*from s-rollback tran,阻塞,58,10.7.3 SQL Server中的并发控制,SQL Server支持的锁机制:NOLOCK(不加锁):-在读取或修改数据时不加任何锁。HOLDLOCK(保持锁):-将此共享锁保持至整个事务结束,而不会在途中释放。UPDLOCK(修改锁):-在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。TABLOCK(表锁):-将在整个表上置共享锁直至该命令结束。这个选项保证其他进程只能读取而不能修改数据。PAGLOCK(页锁):-此选项为默

29、认选项,使用共享页锁。TABLOCKX(排它表锁):-将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。,select*from s where.with(holdlock),这些选项将使系统忽略原先用SET设定的事务隔离级别,59,59,本章目录,10.1 并发控制概述10.2 封锁10.3 封锁协议10.4 活锁和死锁10.5 并发调度的可串行性10.6 两段锁协议10.7 封锁的粒度11.8 小结,60,60,本章小结,并发操作带来的数据不一致性问题修改丢失、不可重复读、脏数据数据库的并发控制通常使用封锁机制基本封锁(S锁和X锁)封锁协议(三级封锁协议所能解决的数据不一致性问题)活锁和死锁多粒度封锁(多粒度树、意向锁)并发事务调度的正确性可串行性:两段锁协议冲突可串行性,61,61,本章作业,第五版教材:本章课后9,10,14,62,62,本章作业,第五版教材:本章课后9,10,14,63,63,完,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号