第十一章 并发控制

上传人:欣*** 文档编号:201543202 上传时间:2021-10-10 格式:DOC 页数:5 大小:31KB
返回 下载 相关 举报
第十一章 并发控制_第1页
第1页 / 共5页
第十一章 并发控制_第2页
第2页 / 共5页
第十一章 并发控制_第3页
第3页 / 共5页
第十一章 并发控制_第4页
第4页 / 共5页
第十一章 并发控制_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《第十一章 并发控制》由会员分享,可在线阅读,更多相关《第十一章 并发控制(5页珍藏版)》请在金锄头文库上搜索。

1、第十一章 并发控制第十一章 并发控制 _167; 11.1 并发控制概述 _167; 11.2 封锁 _167; 11.3 活锁和死锁 _167; 11.4 并发调度的可串行性 _167; 11.5 两段锁协议 _167; 11.6 封锁的粒度 _167; 11.7 小结数据库概论1 并发控制 多个用户同时存取数据库时会产生多个事务同时存取同一数据 的操作,称为并发操作 数据库管理系统必须提供并发控制机制 并发控制机制是衡量一个数据库管理系统性能的重要标志之一 数据库概论 _167;11.1 并发控制概述 并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 数据库

2、概论 _167;11.1并发控制概述例:考虑飞机订票系统中的一个活动序列:甲售票点(甲事务) 丢失修改 乙售票点(乙事务) Read某航班的机票余额A, A=16. Read同一航班的机票余额A, A=16. AA-1. Write: A=15 AA-1. Write: A=15甲售票点 (甲事务) 乙售票点 (乙事务) 不可重复读甲售票点 (甲事务) 乙售票点 (乙事务) Read:A=16. Read:B=16 A+B=32 Read:B=16. BB_2 Write:B=32 Read:A=16. Read:B=32 A+B=48 (验算不对) Read:A=16. AA_2 Write

3、: A=32Read:A=32. RollBack A 恢复到16 Read:A=16. 读脏数据 4 数据库概论 并发操作带来的三类数据不一致性 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read) 数据库概论 1. 丢失修改 丢失修改是指事务 1 与事务 2 从数据库中读入同一数据并修 改,事务2的提交结果破坏了事务1提交的结果,导致事务1的 修改被丢失。 2. 读“脏”数据 事务 1 修改某一数据,并将其写回磁盘,当事务 2 读取同一 数据后,事务 1 由于某种原因被撤消,这时事务 1将已修改过的数据恢复原值。事务

4、2读到的数据就与数据库中的数据不一 致,是不正确的数据,又称为“脏”数据。数据库概论6 3. 不可重复读 不可重复读 指事务 1 读取数据后,事务 2 执行更新操作,使事务 1 无 法再现前一次读取结果。 不可重复读包括三种情况: 事务1读取某一数据后: 1.事务2对其做了修改,当事务1再次读该数据时,得到 与前一次不同的值。 2.事务2删除了其中部分记录,当事务1再次读取数据时, 发现某些记录神密地消失了。 3.事务2插入了一些记录,当事务1再次按相同条件读取 数据时,发现多了一些记录。数据库概论 后两种也称 为幻影现象 问题产生原因及解决技术 产生上述三类数据不一致性的主要原因 并发操作破

5、坏了事务的隔离性 并发控制就是要用正确的方式调度并发操作,使一个用户事 务的执行不受其它事务的干扰,从而避免造成数据的不一致性 并发控制的主要技术是封锁(Loc king) 数据库概论 _167;11.2 封锁 一、什么是封锁 封锁 就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释 放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术 数据库概论 二、基本封锁类型 一个事务对某个数据对象加锁后究竟拥有什么样的控制是由 封锁的类型决定的。DBMS通常提供了多种类型的封锁。 基本封

6、锁类型 排它锁(e_clusive lock,简记为_锁) 排它锁:又称为写锁。若事务T对数据对象A加上_锁, 则只允许T读取和修改A,其它任何事务都不能再对A加 任何类型的锁,直到T释放A上的锁。这就保证了其它事 务在T释放A上的锁之前不能再读取和修改A。 共享锁(Share lock,简记为S锁) 共享锁:又称为读锁。若事务T对数据对象A加上S锁, 则其它事务只能再对A加S锁,而不能加_锁,直到T释放 A上的S锁。这就保证了其它事务可以读A,但在T释放A 上的S锁之前不能对A做任何修改数据库概论10 T1(1)_L A (2)读A=16 T2请求_L A 等待 等待 等待 等待 等待 获得

7、_L A 读A=15 A A-1 写回A=14 Commit Unlock A T1(1)SL A=50 SL B=100 读A,B 求和A+B=150 (2) T2 T1(1)_L C 读C=100 C C_215;2 写回C=200 T2 (3)A A-1 写回A=15 Commit Unlock A (4) 请求_L B 等待 等待 等待 (2) (3) 读A=50,B=100 求和A+B=150 Commit Unlock A Unlock B (4) 请求SL C 等待 等待 等待 等待 等待 (3) ROLLBACK (C恢复为100) Unlock C 没有丢失修改 获得_L B

8、 读B=100 B B_215; 2 写回 B=200 Commit Unlock B (4) 获得SL C 读C=100 Unlock C 不再读“脏”数据 数据库概论 可重复读 三、锁的相容矩阵 _N T2 T1 S N Y Y Y _ S - N Y Y YY=Yes,相容的请求 N=No,不相容的请求 数据库概论 _167;11.3 活锁和死锁 封锁技术可以有效地解决并行操作的一致性问题,但 也带来一些新的问题 死锁 活锁 数据库概论 _167;11.3.1 活锁 如果事务T1封锁 了数据R,事务T2 又请求封锁R,于 是T2等待。T3也请 求封锁R,当T1释 放了R上的封之后 系统首

9、先批准了T3 的请求,T2仍然等 待。然后T4又请求 封锁R,当T3释放 了R上的封锁之后 系统又批准了T4的 请求,.,T2有 可能永远等待,这 就是活锁的情形数据库概论14 如何避免活锁 避免活锁简单方法是采用先来先服务的策略 当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队 该数据对象上的锁一旦释放,首先批准申请队列中第 一个事务获得锁。 数据库概论 _167;11.3.2 死锁 如果事务T1封锁了数据R1, T1 _lock R1 . . . _lock R2 等待 等待 等待 . T2 . . _lock R2 . . _lock R1 等待 等待 . T2 封锁了数据 R2 ,然后 T1 又请求封锁 R2 ,因 T2 已封锁了 R2 ,于是 T1 等待 T2 释放 R2 上的锁。接着 T2 又申请封锁 R1 ,因 T1 已封锁了 R1 , T2 也只能等待 T1 释放 R1 上的锁。 这样就出现了 T1 在等待 T2 ,而 T2又在等待 T1 的局面, T1 和 T2 两个 事务永远不能结束,形成死锁。 数据库概论 产生死锁的原因 在数据库中,产生死锁的原因 是两个或多个事务都已封锁了一些数据对象,然后又都请 求对已为其他事务封锁的数据对象加锁,从而出现死等待。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号