第8章 并发控制要点
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.1 并发控制概述
2.不可重复读 不可重复读是指事务T1读取数据后,事务T2 执行更新操作,是T1无法再现前一次读取结 果。具体讲,不可重复读包括三种情况: ① 事务T1读取某一数据后,事务T2对其做了 修改,当事务T1再次读取该数据时,得到与 前一次不同的值。
8.1 并发控制概述
T1 读A=50 读B=100 求和=150 T2
8.1 并发控制概述
3.读“脏”数据 读“脏”数据是指事务T1修改某一数据,并 将其写回磁盘,事务T2读取同一数据后,T1 由于某种原因被撤销,这时T1已修改过的数 据恢复原值,T2读到的数据与数据库中的数 据不一致,则T2读到的数据就为“脏”数据。
8.1 并发控制概述
T1 读C=100 C=C*2 写回C ROLLBACK C恢复为100 T2
串行调度: 每个事务的基本操作都连在一起, 没有和其他事务的操作交错执行。 当且仅当某组事务的一定交叉调度产生的结 果和这些事务的某一串行调度的结果相同, 则这个交叉调度是可串行化的。 可串行性(Serializability)是并行事务正确性的 准则,规定:一给定的并发调度,当且仅当 它是可串行化的,才认为是正确调度。
8.1 并发控制概述
为了保证事务的隔离性和一致性,必须对事 务的并发控制加以控制,首先考虑一个例子: 1.甲事务读出某航班的机票余额A=16 2.乙事务读出同一航班的机票余额A=16 3.甲卖出一张机票,A=A-1,这时A=15,把A 写回数据库 4.乙也卖出一张机票,A=A-1,这时A=15, 把A写回数据库
8.6 两段锁协议
两段锁协议规定所有的事务应遵守下列规则:
在对任何数据进行读、写操作之前,事务首先要获得对
该数据的封锁(获得封锁) 在释放一个封锁之后,事务不再获得任何其他封锁(释放 封锁)
定理:若所有事务均遵守两段锁协议,则这些事务 的所有交叉调度都是可串行化的 所有遵守两段锁协议的事务,其并行执行结果一定是 正确的
8.7 封锁的粒度
封锁对象的大小称为封锁粒度。 封锁粒度与系统的并发度和并发控制的开销 密切联系。封锁粒度越大,并发度越小,封 锁粒度越小,并发度越大。 如果在一个系统中同时支持多种封锁粒度供 不同的事务选择,这种封锁方法称为多粒度 封锁。多粒度锁主要考虑封锁开销和并发度。
8.7 封锁的粒度
显式封锁 隐式封锁 意向锁
8.4 活锁和死锁
一、活锁 如果事务T1封锁了数据R,事务T2又申请封 锁R,于是T2等待。T3也申请封锁R,当T1 释放了R上的封锁之后系统首先批准了T3的 请求,T2仍然等待。然后T4申请R…..,可能 造成T2永远等待,这就是活锁。 避免活锁最简单的方法是先来先服务。
8.4 活锁和死锁
二、死锁 多个事务互相竞争资源而造成的互相等待即 死锁。解决死锁问题主要有两种方法:一类 是死锁的预防;一类是允许产生死锁,采取 一定手段定期检测,如果有死锁则解除。
8.3 封锁协议
在运用X锁和S锁对数据对象加锁时,还需要 约定一些规则,例如,何时申请X锁或S锁、 持锁时间、何时释放等,称这些规则为封锁 协议。
8.3 封锁协议
一、一级封锁协议 一级封锁协议是:事务T在修改数据R之前必须先对 其加X锁,直到事务结束才释放。 二、二级封锁协议 二级封锁协议是:一级封锁协议加上事务T在读取 数据R之前必须先对其加S锁,读完后即可释放S锁。 三、三级封锁协议 三级封锁协议是:一级封锁协议加上事务T在读取 数据R之前必须先对其加S锁,直到事务结束才释放。
第八章 并发控制
前言
数据库是一个共享资源. 应允许多个用户程序并行地存取数据库. 交叉并发方式、同时并发方式 当多个用户程序并发地存取同一数据的情况下,若对 并发操作不加以控制,就会存取和存储不正确的数据, 破坏数据库的完整性. 并发控制:用正确的方式调度并发操作,避免造成数 据的不一致性,使一个用户事务的执行不受其他事务 的干扰. 并发控制的主要方法: 封锁机制
8.4 活锁和死锁
1.死锁的预防:
一次封锁法 顺序封锁法
2.死锁的诊断与解除
超时法
等待图法
8.5 并发调度的可串行性
并行事务中,并行操作的调度是随机的 几个并行执行的事务,当且仅当其结果与按 某一次序串行地执行的结果相同时,则称他 们的并行执行是正确的。
8.5 并发调度的可串行性
读C=200
8.1 并发控制概述
产生上述三类数据不一致性的主要原因是并 发操作破坏了事务的隔离性。并发控制就是 要用正确的方式调度并发操作,使一个用户 事务的执行不受其它事务的干扰,从而避免 造成数据的不一致性。并发控制的主要技术 是封锁。
Βιβλιοθήκη Baidu
8.2 封锁
封锁是实现并发控制的一个非常重要的技术。 所谓封锁就是事务T在对某个数据对象例如表、 记录等操作之前,先向系统发出请求,对其 加锁。加锁后事务 T就对该数据对象有了一 定的控制,在事务T释放它的锁之前,其它的 事务不能更新此数据对象。 基本的锁类型有两种:排它锁和共享锁。
8.1 并发控制概述
在这种情况下,卖出两张机票,但数据库中 机票的数量只减少了1。这时发生数据库的不 一致,这种不一致是由并发操作引起的。 仔细分析并发操作带来的数据不一致性包括 三类:丢失修改、不可重复读和读“脏”数 据。
8.1 并发控制概述
1.丢失修改 两个事务T1和T2读入同一数据并修改,T2提交的结 果破坏了T1的结果,导致T1修改丢失。 T1 T2 读A=16 读A=16 A=A-1 写回A=15 A=A-1 写回A=15
读B=100 B=B*2 写回B=200 读A=50 读B=200 求和=250
8.1 并发控制概述
② 事务T1按一定条件从数据库中读取了某些 数据记录后,事务T2删除了其中部分记录, 当T1再次按相同条件读取数据时,发现某些 记录消失。 ③ 事务T1按一定条件从数据库中读取数据后, 事务T2插入了一些记录,当T1再次按相同条 件读取时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象。