火龙果oracle并发控制_第1页
火龙果oracle并发控制_第2页
火龙果oracle并发控制_第3页
火龙果oracle并发控制_第4页
火龙果oracle并发控制_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、第十一章第十一章 并发控制并发控制授课内容授课内容 11.1 并发控制概述并发控制概述 11.2 封锁封锁(Locking) 11.3 活锁和死锁活锁和死锁 11.4 并发调度的可串行性并发调度的可串行性 11.5 两段锁协议两段锁协议 11.6 封锁的粒度封锁的粒度 11.1 并发控制概述并发控制概述并发控制概述并发控制概述 多用户数据库系统多用户数据库系统 允许多个用户同时使用的数据库系统称为多用允许多个用户同时使用的数据库系统称为多用户数据库系统。户数据库系统。 多用户数据库系统面临着执行多事务的情况。多用户数据库系统面临着执行多事务的情况。 多事务执行方式多事务执行方式 (1)事务串行

2、执行事务串行执行每个时刻只有一个事务运行,其他事务必须每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。等到这个事务结束以后方能运行。不能充分利用系统资源,不能发挥数据库共不能充分利用系统资源,不能发挥数据库共享资源的特点。享资源的特点。并发控制概述并发控制概述 多事务执行方式多事务执行方式 (2)交叉并发方式交叉并发方式是单处理机系统中的是单处理机系统中的并发方式,多个并行并发方式,多个并行事务的操作轮流交叉事务的操作轮流交叉运行。运行。能够减少处理机的空能够减少处理机的空闲时间,提高系统的闲时间,提高系统的效率。效率。并发控制概述并发控制概述 多事务执行方式多事务执行方式

3、 (3)同时并发方式同时并发方式多处理机系统中,每个处理机可以运行多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。个事务,实现多个事务真正的并行运行。最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境并发控制概述并发控制概述 事务并发执行带来的问题事务并发执行带来的问题并发执行的多个事务可能会同时存取同并发执行的多个事务可能会同时存取同一数据,造成数据的不一致,破坏事务一数据,造成数据的不一致,破坏事务的隔离性和数据库的一致性。的隔离性和数据库的一致性。DBMS必须提供并发控制机制解决事

4、务并必须提供并发控制机制解决事务并发执行带来的问题。(并发控制器)发执行带来的问题。(并发控制器)并发控制机制是衡量一个并发控制机制是衡量一个DBMS性能的重性能的重要标志之一。要标志之一。并发控制概述并发控制概述 并发操作带来的数据不一致性并发操作带来的数据不一致性丢失修改(丢失修改(lost update)不可重复读(不可重复读(non-repeatable read)读读“脏脏”数据(数据(dirty read)并发控制概述并发控制概述 丢失修改丢失修改丢失修改是指事务丢失修改是指事务T1与事务与事务T2从数据从数据库中读入同一数据并库中读入同一数据并修改,事务修改,事务T2的提的提交结

5、果破坏了事务交结果破坏了事务T1提交的结果,导提交的结果,导致事务致事务T1的修改被的修改被丢失。丢失。T1T2读读A=16读读A=16 AA-1,写回写回A=15AA-1,写回写回A=15并发控制概述并发控制概述CREATE TABLE sales(id char(2),qty int)insert into sales values( A1, 10 )并发控制概述并发控制概述 事务一事务一begin trandeclare sl intselect sl = qty from sales where id = A1waitfor delay 00:00:15.000update sales

6、 set qty = sl - 1 where id = A1commit tran 事务二事务二begin trandeclare sl intselect sl = qty from sales where id = A1waitfor delay 00:00:15.000update sales set qty = sl - 1 where id = A1commit tran并发控制概述并发控制概述 不可重复度不可重复度 1、事务、事务T1读取某一数据后,事务读取某一数据后,事务T2对其做了对其做了修改,当事务修改,当事务T1再次读该数据时,得到与前再次读该数据时,得到与前一次不同的值

7、。一次不同的值。T1读读B=100读读B=100BB*2写回写回B=200读读B=200T2begin trandeclare sl intdeclare s2 intselect sl = qty from sales where id = A1print(sl)waitfor delay 00:00:30.000select s2 = qty from sales where id = A1print(s2)commit tranbegin tranupdate sales set qty = qty *2 where id = A1commit tran并发控制概述并发控制概述 不可重复

8、度不可重复度2、事务、事务T1按一定条件读取某些数据记录按一定条件读取某些数据记录后,事务后,事务T2删除了其中部分记录,当事删除了其中部分记录,当事务务T1再次按相同条件读取数据时,发现再次按相同条件读取数据时,发现某些记录神密地消失了。某些记录神密地消失了。3、事务、事务T1按一定条件读取某些数据记录按一定条件读取某些数据记录后,事务后,事务T2插入了一些记录,当事务插入了一些记录,当事务T1再次按相同条件读取数据时,发现多了再次按相同条件读取数据时,发现多了一些记录。一些记录。后两种不可重复读有时也称为后两种不可重复读有时也称为幻影现象。幻影现象。并发控制概述并发控制概述 读读“脏脏”数

9、据数据 事务事务T1修改某一数据,并将其写回磁盘,修改某一数据,并将其写回磁盘,事务事务T2读取同一数据后,事务读取同一数据后,事务T1由于某由于某种原因被撤消,这时事务种原因被撤消,这时事务T1已修改过的已修改过的数据恢复原值,事务数据恢复原值,事务T2读到的数据就与读到的数据就与数据库中的数据不一致,是不正确的数数据库中的数据不一致,是不正确的数据,又称为据,又称为“脏脏”数据。数据。并发控制概述并发控制概述 读读“脏脏”数据数据 (dirty read)T1T2读读C=16CC*2写回写回C=32rollbackC恢复为恢复为16读读C=32 设有两个事务设有两个事务T1、T2,其并发操

10、作如下图所示,其并发操作如下图所示,下面评价正确的是下面评价正确的是_。 A 不存在问题不存在问题 B丢失修改丢失修改C不能重复读不能重复读 D读读“脏脏”数据数据 T1 T2 读读A=10,B=5 读读A=10 AA*2写回写回 读读A=20,B=5 求和求和25验证错验证错 设有两个事务设有两个事务T1、T2,其并发操作如下图所示,其并发操作如下图所示,下面评价正确的是下面评价正确的是_。 A 不存在问题不存在问题 B丢失修改丢失修改C不能重复读不能重复读 D读读“脏脏”数据数据 T1 T2 读读A=10 读读A=10A=A-1,写回,写回A15 A=A-1,写回,写回A15 并发控制概述

11、并发控制概述 事务并发执行会导致数据不一致性事务并发执行会导致数据不一致性由于并发操作破坏了事务的隔离性由于并发操作破坏了事务的隔离性 并发控制就是要用正确的方式调度并发操并发控制就是要用正确的方式调度并发操作,使一个事务的执行不受其他事务的干作,使一个事务的执行不受其他事务的干扰,从而避免造成数据的不一致性扰,从而避免造成数据的不一致性 并发控制的主要技术并发控制的主要技术封锁封锁(Locking)时间戳时间戳(Timestamp)乐观控制法乐观控制法 商用的商用的DBMS一般都采用封锁方法一般都采用封锁方法 11.2 封锁封锁封锁封锁 什么是封锁什么是封锁封锁就是事务封锁就是事务T在对某个

12、数据对象(例如在对某个数据对象(例如表、记录等)操作之前,先向系统发出表、记录等)操作之前,先向系统发出请求,对其加锁。请求,对其加锁。如果事务如果事务T的加锁请求得到满足,事务的加锁请求得到满足,事务T就对该数据对象有了一定的控制。就对该数据对象有了一定的控制。如果事务如果事务T的加锁请求得不到满足,事务的加锁请求得不到满足,事务T就不能控制该数据对象。就不能控制该数据对象。封锁是实现并发控制的一个非常重要的封锁是实现并发控制的一个非常重要的技术技术封锁封锁 基本封锁类型基本封锁类型排它锁(排它锁(Exclusive lock,简记为,简记为X锁)锁)共享锁(共享锁(Share lock,简

13、记为,简记为S锁)锁)封锁封锁 排它锁(排它锁(Exclusive lock,简记为,简记为X锁)锁) 排它锁又称为写锁。排它锁又称为写锁。 若事务若事务T对数据对象对数据对象A加上加上X锁,允许锁,允许T读取和读取和修改修改A,其它任何事务都不能再对,其它任何事务都不能再对A加任何类加任何类型的锁,直到型的锁,直到T释放释放A上的锁。上的锁。 共享锁(共享锁(Share lock,简记为,简记为S锁)锁) 共享锁又称为读锁。共享锁又称为读锁。 若事务若事务T对数据对象对数据对象A加上加上S锁,则事务锁,则事务T可以可以读读A但不能修改但不能修改A,其它事务只能再对,其它事务只能再对A加加S锁

14、,锁,而不能加而不能加X锁,直到锁,直到T释放释放A上的上的S锁。锁。封锁封锁 封锁相容性封锁相容性 T2 T1 XSXSNNYNYYYYYY=Yes,相容的请求,相容的请求N=No,不相容的请求,不相容的请求封锁协议封锁协议 封锁协议(封锁协议(Locking Protocol)在运用在运用X锁和锁和S锁对数据对象加锁时,需锁对数据对象加锁时,需要约定一些规则(封锁协议):要约定一些规则(封锁协议):何时申请何时申请X锁或锁或S锁锁何时释放何时释放X锁或锁或S锁锁 常用的封锁协议:三级封锁协议。常用的封锁协议:三级封锁协议。封锁协议封锁协议 一级封锁协议一级封锁协议事务事务T在修改数据在修改

15、数据R之前必须先对其加之前必须先对其加X锁,直到事务结束才释放。锁,直到事务结束才释放。一级封锁协议可防止丢失修改一级封锁协议可防止丢失修改在一级封锁协议中,如果是读数据,是在一级封锁协议中,如果是读数据,是不需要加锁的,所以它不能避免不可重不需要加锁的,所以它不能避免不可重复读和读复读和读“脏脏”数据。数据。T1T2读读A=16读读A=16 AA-1,写回写回A=15AA-1,写回写回A=15T1T2Xlock A,获得锁,获得锁读读A=16AA-1,写回写回A=15CommitUnlock AXlock A等待等待获得锁获得锁读读A=15, AA-1写回写回A=14CommitUnlock

16、 A 一级封锁协议可防止丢失修改一级封锁协议可防止丢失修改T1T2读读C=16CC*2写回写回C=32 rollbackC恢复为恢复为16 读读C=32 T1T2Xlock C,获得锁,获得锁读读C=16CC*2写回写回C=32rollbackC恢复为恢复为16Unlock C读读C=32一级封锁协议不可避免读一级封锁协议不可避免读“脏脏”数据数据T1T2读读B=100读读B=200Xlock B, 获得锁获得锁读读B=100BB*2写回写回B=200Commit Unlock BT1T2读读B=100读读B=200读读B=100BB*2写回写回B=200一级封锁协议不可避免不可重复读一级封锁

17、协议不可避免不可重复读封锁协议封锁协议 二级封锁协议二级封锁协议一级封锁协议一级封锁协议+事务事务T在读取数据在读取数据R前必前必须先加须先加S锁,锁,读完后不等事务结束读完后不等事务结束即可释即可释放放S锁。锁。二级封锁协议可以防止丢失修改和读二级封锁协议可以防止丢失修改和读“脏脏”数据。数据。在二级封锁协议中,由于读完数据后即在二级封锁协议中,由于读完数据后即可释放可释放S锁,所以它不能避免不可重复读。锁,所以它不能避免不可重复读。T1T2读读C=16CC*2写回写回C=32 rollbackC恢复为恢复为16 读读C=32 T1T2Xlock C,获得锁,获得锁读读C=16CC*2写回写

18、回C=32rollbackC恢复为恢复为16Unlock CSlock C等待等待二级封锁协议可避免读二级封锁协议可避免读“脏脏”数据数据获得锁获得锁读读C=16Unlock CT1T2Sclock B, 获得锁获得锁读读B=100Unlock BSclock B, 获得锁获得锁读读B=200Unlock BXlock B, 获得锁获得锁读读B=100BB*2写回写回B=200Commit Unlock BT1T2读读B=100读读B=200读读B=100BB*2写回写回B=200二级封锁协议不可避免不可重复读二级封锁协议不可避免不可重复读封锁协议封锁协议 三级封锁协议三级封锁协议三级封锁协议

19、三级封锁协议 + 事务事务T在读取数据在读取数据R之前之前必须先对其加必须先对其加S锁,直到事务结束才释放锁,直到事务结束才释放三级封锁协议可避免丢失修改、读三级封锁协议可避免丢失修改、读“脏脏”数据和不可重复读。数据和不可重复读。T1T2Sclock B, 获得锁获得锁读读B=100读读B=100commitUnlock BXlock B等待等待T1T2读读B=100读读B=200读读B=100BB*2写回写回B=200三级封锁协议可避免不可重复读三级封锁协议可避免不可重复读获得锁获得锁读读B=100BB*2写回写回B=200Commit Unlock B封锁协议封锁协议X锁锁S锁锁一致性一

20、致性操作操作结束结束释放释放事务事务结束结束释放释放操作操作结束结束释放释放事务事务结束结束释放释放丢失丢失修改修改读脏读脏数据数据不可不可重复读重复读一级封锁协一级封锁协议议避免避免二级二级封锁协封锁协议议避免避免 避免避免三级封锁协三级封锁协议议避免避免 避免避免避免避免SQL Server的并发机制的并发机制并发控制概述并发控制概述CREATE TABLE sales(id char(2),qty int)insert into sales values( A1, 10 )SQLServer的并发机制的并发机制 加锁加锁begin trandeclare sl intselect sl=

21、qty from sales with(Xlock)where id=A1waitfor delay 00:00:10.000update sales set qty = sl - 1 where id = A1commit tranbegin trandeclare sl intselect sl = qty from sales with(Xlock)where id = A1waitfor delay 00:00:10.000update sales set qty = sl - 1 where id = A1commit tranwith(Xlock)with(Xlock)SQLSer

22、ver的并发机制的并发机制 事务隔离事务隔离 对于编程人员来说,不用手工去设置控制锁,对于编程人员来说,不用手工去设置控制锁,通过设置事务的隔离级别自动管理锁。通过设置事务的隔离级别自动管理锁。SQLServer的并发机制的并发机制 事务隔离事务隔离 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 隔离级别隔离级别 脏读脏读丢失修改丢失修改 不可重复读取不可重复读取 幻影幻影未提交读未提交读 不能避免不能避免 不能避免不能避免 不能避免不能避免不能避免不能避

23、免提交读提交读能避免能避免不确定不确定不能避免不能避免不能避免不能避免可重复读可重复读 能避免能避免能避免能避免能避免能避免不能避免不能避免可串行读可串行读 能避免能避免能避免能避免能避免能避免能避免能避免SET TRANSACTION ISOLATION LEVELREPEATABLE READbegin trandeclare sl intdeclare s2 intselect sl = qty from sales where id = A1print(sl)waitfor delay 00:00:30.000select s2 = qty from sales where id =

24、A1print(s2)commit tranbegin tranupdate sales set qty = qty *2 where id = A1commit tran11.3 活锁和死锁活锁和死锁活锁和死锁活锁和死锁 活锁活锁事务事务T1封锁了数据封锁了数据R事务事务T2又请求封锁又请求封锁R,于是,于是T2等待。等待。T3也请求封锁也请求封锁R,当,当T1释放了释放了R上的封锁上的封锁之后系统首先批准了之后系统首先批准了T3的请求,的请求,T2仍然仍然等待。等待。T4又请求封锁又请求封锁R,当,当T3释放了释放了R上的封锁上的封锁之后系统又批准了之后系统又批准了T4的请求的请求T2有可

25、能永远等待(饿死)。有可能永远等待(饿死)。活锁和死锁活锁和死锁 如何避免活锁如何避免活锁采用先来先服务的策略:采用先来先服务的策略:当多个事务请求封锁同一数据对象时,当多个事务请求封锁同一数据对象时,按请求封锁的先后次序对这些事务排队,按请求封锁的先后次序对这些事务排队,该数据对象上的锁一旦释放,首先批准该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。申请队列中第一个事务获得锁。活锁和死锁活锁和死锁 死锁死锁T2Xlock R1获得获得Xlock R2等待等待Xlock R2获得获得Xlock R1等待等待T1活锁和死锁活锁和死锁 解决死锁的方法解决死锁的方法1. 采取一定措施

26、预防死锁的发生。采取一定措施预防死锁的发生。2. 允许死锁发生,采取一定方法诊断死允许死锁发生,采取一定方法诊断死锁、解除死锁。锁、解除死锁。活锁和死锁活锁和死锁 死锁的预防死锁的预防一次封锁法一次封锁法要求每个事务必须一次将所有要使用的要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行数据全部加锁,否则就不能继续执行一次封锁法存在的问题:一次封锁法存在的问题:将以后要用到的全部数据加锁,势必扩将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并大了封锁的范围,从而降低了系统的并发度。发度。活锁和死锁活锁和死锁 死锁死锁T2Xlock R1获得获得Xlock R2等待等待Xlock R2获得获得Xlock R1等待等待T1T2Xlock R1,R2获得获得Unlock R1,R2Xlock R2,R1等待等待获得获得T1活锁和死锁活锁和死锁 死锁的预防死锁的预防 顺序封锁法:顺序封锁法:预先对数据对象规定一个封锁顺序,所有事预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。务都按这

温馨提示

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

评论

0/150

提交评论