数据库系统概论 并发控制 数据库系统概论.

Slides:



Advertisements
Similar presentations
专题复习 --- 走进名著 亲近经典 读完《鲁滨孙漂流记》这本精彩的小说 后,一个高大的形象时时浮现在我的眼 前,他就是勇敢的探险家、航海家鲁滨 孙。他凭着顽强的毅力,永不放弃的精 神,实现了自己航海的梦想。 我仿佛看到轮船甲板上站着这样的一 个人:他放弃了富裕而又舒适的生活, 厌恶那庸庸碌碌的人生,从而开始了一.
Advertisements

练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
总复习.
控制方长投下的子公司,需要编制合并报表的演示思路
第8章 数据库管理 南昌大学科学技术学院 讲课老师:王钟庄 2010年7月 数据库原理与应用教程.
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
3.1.3 概率的基本性质.
第10章 并发控制技术 10.1 并发控制概述 10.2 并发控制的正确性准则 10.3 加锁协议 10.4 死锁的检测、处理和预防
第七章 事务管理 7.1 事务 7.2 并发控制 7.3 恢复系统 7.4 长事务和实时事务.
第7章 事务管理 事务管理(transaction management): 恢复——保证事务在并发执行时满足ACID准则的技术。
第八章 故障恢复与事务处理 8.1 事务的基本概念 8.2 数据库恢复概述 8.3 恢复的实现技术 8.4 故障恢复 事务并发控制
第15章 并发控制 基于锁的协议 死锁处理 多粒度 基于时间戳的协议 基于有效性检查的协议 多版本方案 快照隔离 插入,删除操作与谓词读
An Introduction to Database System
常用逻辑用语复习课 李娟.
小学生游戏.
在数轴上比较数的大小.
并发控制 讲授者:李川.
An Introduction to Database System
第5章 数据库安全保护.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
SOA – Experiment 3: Web Services Composition Challenge
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
计算机数学基础 主讲老师: 邓辉文.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
厦门大学数据库实验室 MySQL加锁处理分析 赖明星 2014年5月17日.
逆向工程-汇编语言
第12章 并发控制 本章导读: 知识要点: SQL Server登录 12.1 事务处理 12.2 并发访问 12.3 锁
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
何勉 新浪微博: Scrum框架及其背后的原则 原始图片 何勉 新浪微博:
人教版五年级数学上册第四单元 解方程(一) 马郎小学 陈伟.
材料二甲 授課教師:王致傑 老師 (學420、分機5305)
An Introduction to Database System An Introduction to Database System
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
An Introduction to Database System An Introduction to Database System
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
数据报分片.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
Touch Github = Touch the World
2.2矩阵的代数运算.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
Google的云计算 分布式锁服务Chubby.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
第十七讲 密码执行(1).
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
一元一次方程的解法(-).
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
9.6.2 互补对称放大电路 1. 无输出变压器(OTL)的互补对称放大电路 +UCC
第8章 并发控制 概述 封锁 封锁协议 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒度 Oracle的并发控制 2019/11/20
Presentation transcript:

数据库系统概论 并发控制 数据库系统概论

内容提要 并发控制是数据库管理系统的重要组成部分,通过本章的学习,应重点掌握: 并发控制带来的新问题 封锁及封锁协议 并发调度的可串行性 两段锁协议 数据库系统概论

概述 在单处理机系统中,事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行,称为交叉并发方式。 在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,称为同时并发方式。 并发的目的: 改善系统的资源利用率 改善短事务的响应时间 数据库系统概论

例子 飞机订票系统中的活动序列: 这种情况称为数据库的不一致性,是由并发控制引起的。 ①甲售票点读出某航班的机票余额A,设A=16 ③甲售票点卖出一张机票,修改余额A←A-1,把A=15写回数据库 ④乙售票点也卖出一张机票,修改余额A←A-1,把A=15写回数据库 这种情况称为数据库的不一致性,是由并发控制引起的。 数据库系统概论

数据不一致性(1) 丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。“写—写冲突” 读“脏”数据:事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。 “读—写冲突” 数据库系统概论

数据不一致性(2) 不可重复读:事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次的读取结果。 “读—写冲突” 产生原因:并发操作破坏了事务的隔离性 并发控制的任务:用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,避免造成数据的不一致性。 并发控制的主要方法:封锁 数据库系统概论

三种数据不一致性 T1 T2 读A=16 读A=50 读B=100 求和=150 读C=100 C←C*2 写C=200 B←B*2 求和=250 ROLLBACK C=100 数据库系统概论

封锁(Locking)(1) 封锁:事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。 封锁类型:排它锁(X锁)和共享锁(S锁) 排它锁:又称写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的X锁。 共享锁:又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。 数据库系统概论

封锁(Locking)(2) X锁和S锁的控制方式可有相容矩阵表示。 最左边表示T1已经获得的锁的类型,最上面表示T2的封锁请求, -表示没有加锁。 Y表示相容,请求可以满足;N表示冲突,请求被拒绝。 T1 T2 X S - N Y 数据库系统概论

一级封锁协议 加锁必须遵守一定的规则,称为封锁协议。 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。 一级封锁协议中,如果是读数据不修改,是不需要加锁的,可防止丢失修改。 数据库系统概论

二级封锁协议 二级封锁协议:在一级封锁协议基础上,加上事务T在读数据R之前必须先对其加上S锁,读完后即可释放S锁。 数据库系统概论

三级封锁协议 三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 三级封锁协议除了防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。 上述三级协议的主要区别在于:什么操作需要申请封锁,以及何时释放锁。 数据库系统概论

不同级别的封锁协议 X锁 S锁 一致性保证 √ 操作结束释放 事务结束释放 不丢失修改 不读脏数据 可重复读 一级封锁协议 二级封锁协议 三级封锁协议 数据库系统概论

活锁 若某数据对象加了S锁,这时若有其它事务申请对它的X锁,则需等待。但此时若有其它事务申请对它的S锁,按相容矩阵,应可获准。如果不断有事务申请对此数据对象的S锁,以致它始终被S锁占有,而X锁的申请迟迟不能获准。这种现象叫活锁。 避免活锁的简单方法是采用“先来先服务”的策略。 数据库系统概论

死锁 一个事务如果申请锁而未获准,则需等待其它事务释放锁。如果事务中出现循环等待时,如果不加干预,则会一直等待下去,这叫死锁。 对付死锁的方法: 检测死锁,发现死锁后处理死锁 防止死锁 数据库系统概论

死锁的诊断(1) 超时法:如果一个事务的等待时间超过了某个时限,就认为发生死锁。 特点: 优点:简单 缺点:一是事务因其它原因(如系统负荷太重、通信受阻等)而使事务等待时间超过时限,可能被误判死锁。二是时限的设置。 数据库系统概论

死锁的诊断(2) 等待图法:等待图是一个有向图G=(T,U)。 当且仅当等待图中出现回路时,死锁发生。 当运行的事务比较多时,维护等待图和检测回路的开销较大,影响系统的性能。 方法是周期性的进行死锁检测。死锁检测周期的确定用实验方法确定最佳值。 数据库系统概论

死锁的解除(1) 出现死锁后,必须由DBMS干预。处理如下: 被牺牲的事务可以有两种处理: 在循环等待的事务中,选一个事务作为“牺牲者”,给其它事务让路 撤销牺牲的事务,释放其获得的锁及其它资源 将释放的锁让给等待它的事务 被牺牲的事务可以有两种处理: 发消息给有关用户,由用户向系统再交付该事务 由DBMS重新启动该事务 注:被牺牲的事务应等待一段时间才能交付系统,否则可能再发生死锁。 数据库系统概论

死锁的解除(2) 选择哪个事务作为牺牲者,由下列几种选法: 选择最迟交付的事务作为牺牲者 选择获得锁最少的事务作为牺牲者 选择撤销代价最小的事务作为牺牲者 数据库系统概论

死锁的预防—一次封锁法 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁。 缺点: 有些数据对象过早的加锁,降低了并发度 如果有些事务需要访问的“热点”数据比较多,其它事务总是不断的占有其中某些数据,不能一次获得所需要数据的全部,就会一直等待下去,易发生活锁。 数据库系统概论

死锁的预防—顺序封锁法 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 缺点: 数据库中一般是按内容访问,而不是按名访问,所以很难预先确定所有的访问对象 数据经常变动,次序也经常调整 上述两种方法用于数据库系统不实际。 数据库系统概论

死锁的预防—事务重执(1) 事务重执:当事务申请锁而未获准时,不是一律等待,而是让一些事务撤销重执。 为区别事务开始执行的先后,每个事务开始执行时,赋予一个唯一的、随时间增长的整数,称为时间标记,记为ts。如两个事务TA和TB,若ts(TA)< ts(TB),表明TA比TB“年老” 事务重执有两种策略 等待—死亡策略 击伤—等待策略 数据库系统概论

死锁的预防—事务重执(2) 等待—死亡策略 设TB持有某对象数据的锁,当TA申请同一数据的锁发生冲突时,按如下规则处理: If ts(TA)<ts(TB) then TA waits; else { rollback TA; / *die* / restrat TA with the same ts(TA); } 总是年老的事务等待年轻的事务。 数据库系统概论

死锁的预防—事务重执(3) 击伤—等待策略 设TB持有某对象数据的锁,当TA申请同一数据的锁发生冲突时,按如下规则处理: If ts(TA)>ts(TB) then TA waits; else { rollback TB; / *wound* / restrat TB with the same ts(TB); } 总是年轻的事务等待年老的事务。 数据库系统概论

死锁的预防—事务重执(4) 上述两种策略中,当冲突发生时,总是以年轻的事务作为牺牲品。因为年轻的事务随着时间的流逝,总会变成年老的事务,不致永远成为牺牲品。 数据库系统概论

并发调度的可串行性(1) 定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,称这种调度策略为可串行化的调度。 可串行性是并发事务正确性的准则。按这个规则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。 对于n个事务,可有n!中排列次序,即有n!种串行调度。 数据库系统概论

并发调度的可串行性(2) 一个调度S是否可串行化,可用前趋图来测试。前趋图是有向图,点表示所有参与调度的事务对于边,当满足下列条件之一时,加入: Ri(x)在Wj(x)之前 Wi(x)在Rj(x)之前 Wi(x)在Wj(x)之前 若前趋图中有回路,则S显然不等价于任何串行调度,若无回路,则可用拓扑排序得到一个串行调度。 数据库系统概论

并发调度的可串行性(3) 设有事务集{T1,T2,T3,T4}的一个调度: S=W3(y)R1(x)R2(y)W3(x)W2(x)W3(z)R4(z)W4(x) 试检验S是否可串行化。 分别分析对x,y,z的所有操作,画出前趋图。 T2 T1 T4 T1,T3,T2,T4 T3 数据库系统概论

并发调度的可串行性(4) 可串行化调度和串行调度是有区别的: 前者交叉执行各事务操作,在效果上相当于事务的某一串行执行 后者完全是串行执行各事务,失去并发意义,不能充分利用系统资源 DBMS并发控制的任务就是保证事务执行的可串行化,比较有效的方法是要求DBMS按一定的封锁协议调度事务,以保证其执行可串行化。 两段锁协议(2PL)就是保证并发调度可串行化的封锁协议。 数据库系统概论

两段锁协议(1) 两段锁协议是指所有事务必须分两个阶段对是数据项加锁和解锁 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。——扩展阶段 在释放一个封锁之后,事物不再申请和获得任何其它封锁。——收缩阶段 若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都可是可串行化。(充分条件)(可用反证法证明) 数据库系统概论

两段锁协议(2) 两段锁协议和一次封锁法的异同: 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议 两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此可能会发生死锁 数据库系统概论

封锁的粒度 定义:封锁对象的大小。 封锁的对象: 封锁粒度一系统的并发度和并发控制开销相关 可以是逻辑单元:属性、属性值的集合、元组、关系、索引项、整个索引、整个数据库 也可以是物理单元:页(数据页或索引页)、块 封锁粒度一系统的并发度和并发控制开销相关 封锁粒度越大,并发度越小,系统开销越小 封锁粒度越小,并发度较高,系统开销越大 数据库系统概论

多粒度封锁 如果在一个系统中同时支持多种封锁粒度供不同的事务选择,这种封锁方法称为多粒度封锁 多粒度封锁,一个数据对象可能以两种方式被封锁: 显式封锁:应事务的要求直接加锁于该数据对象 隐式封锁:该数据对象没有加锁,而是由于它的上级被封锁,应此这个数据对象被隐含地封锁了 为了方便加锁引起的冲突,引进了意向锁(INTENTION LOCK) 数据库系统概论

意向锁(1) 含义:如果对一个结点加意向锁,则说明该结点的下级结点正在被加锁;对任一结点加锁时必须先对其上级结点加意向锁。 意向共享锁(IS):如果对一个数据对象加IS锁,表示它的后裔结点加了或拟(意向)加S锁 意向排它锁(IX):如果对一个数据对象加IX锁,表示它的后裔结点加了或拟(意向)加X锁 共享意向排它锁(SIX):如果对一个数据对象加SIX锁,表示它加了S锁,再加IX锁。即SIX= S+IX。如读整个关系,修改其中元组,则该关系加SIX锁 数据库系统概论

意向锁(2) 各种锁的相容矩阵 T1 T2 S X IS IX SIX - Y N 数据库系统概论

意向锁(3) 各种锁的强度如图所示偏序关系 X SIX 所谓强度是指它对其它 锁的排斥程度。 S IX S 一个事务在申请封锁时, 以强所代替弱锁是安全的; - 反之则不然。 数据库系统概论

意向锁(4) 在多粒度封锁中,要对一个数据对象加锁,必须对这个数据对象所有上级加相应的意向锁。 申请锁时,应按自上而下的次序申请,以便及时发现冲突,停止下级锁的申请 释放锁时,应按自下而上的次序释放 数据库系统概论

习题 使某个事务永远处于等待状态,而得不到执行的现象称为( )。 A 死锁 B 活锁 C 串行调度 D 不可串行调度 使某个事务永远处于等待状态,而得不到执行的现象称为( )。 A 死锁 B 活锁 C 串行调度 D 不可串行调度 对数据对象施加封锁,可能会引起活锁和死锁问题。避免活锁的简单方法是采用()的策略。 A 顺序封锁法 B 依次封锁法 C 优先级高先服务 D 先来先服务 习题13 数据库系统概论