数据库系统概论九.pptx
《数据库系统概论九.pptx》由会员分享,可在线阅读,更多相关《数据库系统概论九.pptx(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年2月14日111.1 问题的产生问题的产生多用户数据库系统的存在 允许多个用户同时使用的数据库系统飞机定票数据库系统银行数据库系统 特点:在同一时刻并发运行的事务数可达数百个 第1页/共76页2023年2月14日2事务串行执行事务串行执行每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。不能充分利用系统资源,发挥数据库共享资源的特点。T1T2T3第2页/共76页2023年2月14日3事务交叉并发方式事务交叉并发方式在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行。单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的
2、效率。第3页/共76页2023年2月14日4事务同时并发方式事务同时并发方式多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。第4页/共76页2023年2月14日5问题的产生问题的产生事务并发执行带来的问题会产生多个事务同时存取同一数据的情况可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性第5页/共76页2023年2月14日611.2 事务的并发执行可能产生的不一致事务的并发执行可能产生的不一致性性T1T2T1T2T1T2读A=50读C=100读A=16读B=100执行C=C*2读A=16求和=150写回C=200执行A=A-1
3、读B=100读C=200写回A=15执行B=B*2撤销提交写回B=200C恢复为100执行A=A-1读A=50写回A=15读B=200求和=250(验算不对)不可重复读读“脏”数据丢失修改第6页/共76页2023年2月14日7产生的不一致性的根本原因产生的不一致性的根本原因操作冲突如果两个事务发生的两个操作都针对于同一数据项,只要其中有一个是写操作,则这两个操作是冲突的。第7页/共76页2023年2月14日811.3 串行化调度串行化调度调度可串行化调度第8页/共76页2023年2月14日9调度调度调度:安排多个事务中的操作的执行次序。设有事务,T1:R1(x)W1(y)T2:R2(x)W2(
4、x)T3:R3(y)W3(y)a.串行调度:串行调度:b.并发调度:并发调度:Ri(x)表示事务Ti对数据项x进行读操作;Wi(x)表示事务Ti对数据项x进行写操作;S1:R1(x)W1(y)R2(x)W2(x)R3(y)W3(y)S2:R2(x)R1(x)W1(y)R3(y)W2(x)W3(y)第9页/共76页2023年2月14日10T1:read(A);A:=A-50;write(A);read(B);B:=B+50;write(B).T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B).T1:从账户A过户
5、¥50到账户BT2:从账户A过户10%的存款余额到账户B执行前A:¥1000,B:¥2000第10页/共76页2023年2月14日11 read(A);A:=A-50;write(A);read(B);B:=B+50;write(B).read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B).T1T2调度S1调度S1:串行调度,T2跟在T1之后执行后:A:¥855,B:2145第11页/共76页2023年2月14日12read(A);A:=A-50;write(A);read(B);B:=B+50;write(B).re
6、ad(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B).T1T2调度S2调度S2:串行调度,T1跟在T2之后执行后:A:¥850,B:2150第12页/共76页2023年2月14日13read(A);A:=A-50;write(A);read(B);B:=B+50;write(B).read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B).T1T2调度S3调度S3:并行调度,等价于调度1执行后:A:¥855,B:2145第13页/共76页2023年2
7、月14日14 read(A);A:=A-50;write(A);read(B);B:=B+50;write(B).read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B).T1T2调度S4调度S4:并行调度,不等价于调度1执行后:A:¥950,B:2100第14页/共76页2023年2月14日15可串行化调度可串行化调度并发事务的不同调度方式产生不同的结果,当且仅当并发执行的结果等价于某一次序串行执行的结果时,该调度是正确的,这种调度称为可串行化调度。可串行性是并发事务正确性的准则,所有并发调度都必须是可串行化调度。第1
8、5页/共76页2023年2月14日16冲突可串行化调度冲突可串行化调度冲突操作是指不同的事务对同一个数据的读写操作和写写操作Ri(x)与Wj(x)/*事务Ti读x,Tj写x*/Wi(x)与Wj(x)/*事务Ti写x,Tj写x*/其他操作是不冲突操作不同事务的冲突操作和同一事务的两个操作不能交换第16页/共76页2023年2月14日17冲突可串行化调度(续)冲突可串行化调度(续)一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc,如果Sc是串行的,称调度Sc为冲突可串行化的调度。可串行化调度的充分条件:一个调度是冲突可串行化,一定是可串行化的调度第1
9、7页/共76页2023年2月14日18冲突可串行化调度(续)冲突可串行化调度(续)正例今有调度Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B)Sc2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)Sc2等价于一个串行调度T1;T2,因此,Sc1是冲突可串行化的调度。第18页/共76页2023年2月14日1911.4 并发控制机制并发控制机制 用户请求执行事务的时刻是随机的,系统如何在一种动态的环境下保证调度的可串行性?并发控制机制的任务是维持
10、数据库的一致性,或者说维持事务调度的可串行性的前提下,如何提高并行度。q封锁机制q基于时标的并发控制机制q其它的并发控制技术多版本(Multiversion)并发控制技术乐观的并发控制第19页/共76页2023年2月14日20封锁机制封锁机制基本思想锁的类型加锁粒度及其选择加锁与释放的时机附加协议两段锁协议 活锁(饿死)和死锁第20页/共76页2023年2月14日21基本思想基本思想防止操作冲突第21页/共76页2023年2月14日22锁的类型锁的类型共享锁(读锁):如果数据项被某事务用共享锁加锁,其它事务仍可用共享锁读它。互斥锁(写锁):如果数据项被某事务用互斥锁加锁,其他事务欲操作这一数据
11、项,必须等待该事务释放此互斥锁。相容矩阵锁LOCK(x)的三种状态:读锁、写锁和解锁锁的操作:read_lock(x)、write_lock(x)、unlock(x)T2T1写锁读锁写锁NNY读锁NYYYYY第22页/共76页2023年2月14日23加锁粒度及其选择加锁粒度及其选择加锁粒度指加锁目标的大小。加锁目标在数据库系统中,加锁的目标可以是数据项、数据项的集合、记录、文件甚至整个数据库,还可以是物理页、区等计算机资源。加锁粒度的选择影响到事务的并发度和并发控制的开销。加锁粒度越小,事务并发度越高,并发控制的开销也就越大;反之,粒度越大,事务并发度越低,系统控制开销越小。第23页/共76页
12、2023年2月14日24加锁与释放的时机加锁与释放的时机四级封锁协议:级别0:一个事务不修改其它未提交的事务正在操作的数据。级别1:在满足级别0的基础上,对任何要修改数据加写锁,直到事务结束才释放。级别2:在满足级别1的基础上,对任何要读取的数据加读锁,读完后即可释放。级别3:在满足级别1的基础上,对任何要读取的数据加读锁,直到事务结束才释放。在上述的四个级别中,级别越高,对数据的使用限制越多,数据的一致性越有保证,但是产生死锁的可能性也越大;级别越低,事务的并发度越高,产生死锁的可能性越小,但是数据的一致性保障越弱,越需要用户谨慎操作数据。不丢失修改不读脏数据可重复读第24页/共76页202
13、3年2月14日25不丢失修改不丢失修改T1T2读读A=16A=A-1写回写回A=15交付交付 读读A=16执行执行A=A-1撤销撤销(A恢复恢复16)T1T2 LOCK(A)=写锁写锁读读A=16A=A-1写回写回A=15交付交付UNLOCK(A)write_lock(A)等待等待等待等待等待等待等待等待LOCK(A)=写锁写锁读读A=16执行执行A=A-1撤销撤销UNLOCK(A)(A恢复恢复15)第25页/共76页2023年2月14日26不读不读“脏脏”数数据据T1T2读读C=100C=C*2写写C=200撤销撤销(C恢复为恢复为100)读读C=200T1T2 LOCK(C)=写锁写锁读读
14、C=100C=C*2写写C=200撤销撤销UNLOCK(C)(C恢复为恢复为100)read_lock(C)等待等待等待等待等待等待LOCK(C)=读锁读锁读读C=100UNLOCK(C)交付交付第26页/共76页2023年2月14日27可重复读可重复读T1T2读读A=50,B=100 求和求和=150读读A=50,B=200 求和求和=250读读B=100执行执行B=B*2写回写回B=200T1T2 LOCK(A)=读锁读锁LOCK(B)=读锁读锁读读A=50,B=100求和求和=150读读A=50,B=100 求和求和=150交付交付UNLOCK(A)UNLOCK(B)write_lock
15、(B)等待等待等待等待等待等待等待等待等待等待等待等待等待等待LOCK(B)=写锁写锁读读B=100执行执行B=B*2写回写回B=200交付交付UNLOCK(B)第27页/共76页2023年2月14日28T1:Slock yRead(y)Unlock(y)Xlock xRead(x)x x+yWrite(x)Unlock(x)T2:Slock xRead(x)Unlock(x)Xlock yRead(y)y x+yWrite(y)Unlock(y)x=20,y=30T1;T2:x=50,y=80T2;T1:x=70,y=50使用共享锁和互斥锁,不一定能保证事使用共享锁和互斥锁,不一定能保证事务
16、调度的可串行性。务调度的可串行性。第28页/共76页2023年2月14日29T1:Slock yRead(y)Unlock(y)Xlock x等待等待Read(x)x x+yWrite(x)Unlock(x)T2:SlockxRead(x)Unlock(x)XlockyRead(y)y x+yWrite(y)Unlock(y)x=50,y=50问题的原因:T1中对y的解锁操作进行得太早;T2中对x的解锁操作进行得太早。x=20,y=30T1;T2:x=50,y=80T2;T1:x=70,y=50第29页/共76页2023年2月14日30附加协议附加协议两段锁协议两段锁协议用途:两段锁协议是实现
17、可串行性的方法。【定理】若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。“两段”锁的含义 所谓“两段”锁是指事务分为两个阶段。第一阶段(扩展阶段)是获得封锁,第二阶段(收缩阶段)是释放封锁。两段锁协议 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;且在释放一个封锁之后,事务不再获得任何其他封锁。即要求在事务中所有的LOCK必须出现在所有UNLOCK之前。第30页/共76页2023年2月14日31示例:下列两个事务哪个符合示例:下列两个事务哪个符合两段锁协议两段锁协议T1:Slock ASlock BXlock CUnlock(B)Unlock(A)Unloc
18、k(C)T2:SlockAUnlock(A)SlockBXlockCUnlock(C)Unlock(B)第31页/共76页2023年2月14日32T1:Slock(y)Read(y)Unlock(y)Xlock(x)等待等待Read(x)x x+yWrite(x)Unlock(x)T2:Slock(x)Read(x)Unlock(x)Xlock(y)Read(y)yx+yWrite(y)Unlock(y)Slock(y)Xlock(x)Read(y)Read(x)xx+yWrite(x)Unlock(x)Unlock(y)Slock(x)Xlock(y)等待Read(x)Read(y)yx+y
19、Write(y)Unlock(x)Unlock(y)Slock(y)Read(y)Xlock(x)等待Read(x)xx+yWrite(x)Unlock(x)Unlock(y)Slock(x)Read(x)Xlock(y)等待Read(y)yx+yWrite(y)Unlock(y)Unlock(x)第32页/共76页2023年2月14日33活锁(饿死)和死锁活锁(饿死)和死锁封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题 活锁 死锁第33页/共76页2023年2月14日341.活锁活锁 一个事务长时间等待其他事务解锁而不能正常执行的状态。第34页/共76页2023年2月14日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 概论
限制150内