高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制

事务的并发

事务的并发是指在某一时间段内,多个事务同时存取相同的数据库数据。

并发操作时由于不能隔离而产生的问题:
①丢失修改
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第1张图片
②读入”脏“数据
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第2张图片
③不可重复读
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第3张图片

并发调度

一组并发事务当中的一些重要的操作按照时间的顺序给出一个排列,则称这个排列是这组事务的一个调度
在这里插入图片描述
一致性状态:事务在执行的过程中,变量的状态变化是一致的,则称为一致性状态。

一致性调度:如果执行一个调度能使得数据库从一个一致性状态转入另一个一致性状态,则称该调度是一个一致性调度。

可串行化调度:一组并发执行的事务,如果其一个调度与该组事务的串行化调度有着相同一致性状态,则称该调度为可串行化调度。
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第4张图片
冲突可串行化:某一并行调度经过非冲突指令转换成串行调度,且与该串行调度的执行结果一致,则该调度是冲突可串行化的。(将一个串行调度经过非冲突指令转换成并行调度,该调并行调度也是冲突可串行化的。)
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第5张图片
冲突可串行调度一定是一致性调度
冲突可串行不是可串行的必要条件
例子:高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第6张图片
判断是否为冲突可串行化调度:看优先图,如果有向弧是无环的,说明该调度是冲突可串行化的,如果有向弧是有环的,说明该调度是非冲突可串行化的。
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第7张图片

基于锁的并发调度协议

【1.锁的基本模式】
共享锁(Shared——S锁):允许执行读操作
排他锁(Exclusive——X锁):允许执行读/写操作

【2.锁的调度策略】
(1)解除一个数据对象的排它锁之前,其他事务不能对它加任何锁
(2)一个数据对象允许加几个共享锁,但不能在共享锁之上,加排它锁
(3)锁的相容矩阵:只有S锁和S锁之间是相容的
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第8张图片
(4)加锁产生的问题:
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第9张图片

高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第10张图片

高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第11张图片
【3.两阶段锁协议】:所有事务分两个阶段提出加锁和解锁请求。
增长阶段:事务可以获得锁,但不能解锁。
缩减阶段:事务解锁,但不能获得锁。
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第12张图片
遵循两段锁协议的并发控制算法所产生的调度是冲突可串行调度,解决了第一个问题,但仍然存在死锁和级联回滚的现象。

强两阶段锁协议:要求事务提交之前不得释放任何锁。(解决级联回滚的现象)

但是两段锁协议的并发程度较低,为了提高并行能力,采用锁转换机制,在写的时候将S锁转换成X锁,写完后再降为S锁

【4.多粒度锁和意向锁】

多粒度树:我们可以把整个数据库建立成一棵多粒度树,然后对这棵粒度树上的每一个节点进行加锁,加锁的方式有显式加锁和隐式加锁。
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第13张图片

显式加锁:树上的每个节点都可以单独加锁。
隐式加锁:对当前节点加锁会导致隐式地给全部后代节点加上同类型的锁。
检查锁的冲突时,必须检查祖先、后代节点。

意向锁:一个事务对一个数据对象显式加锁之前,必须对它的全部祖先节点加意向锁。
如果一个节点上加有意向锁,就意味着它的后代节点必有被显式加锁。
(1).意向共享锁(Intent Share Lock, IS锁):若对某节点加S锁,则它的父代节点必须加IS锁。
(2).意向写锁(Intent Exclusive Lock, IX锁):若对某节点加X锁,则它的父代节点必须加IX锁。
(3).共享锁和意向写锁(Share Intent Exclusive Lock, SIX锁):若对某节点加SIX锁,则对该节点不仅显式地加了S锁,还对它加了IX锁,即SIX=S+IX。

锁的相容矩阵:
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第14张图片
可串行多粒度锁协议:
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第15张图片
多粒度锁协议的优点增加并行性,减少锁的开销。
多粒度锁协议在以下情况有用:
只存取几个数据项的短事务。
由整个文件或一组文件形成报表的长事务。

【5.死锁的处理】
死锁:两个或两个以上事务处于等待状态,每个事务都在等待其中另一个事务释放资源,导致所有事务都无法执行,这种现象称为死锁。

处理死锁的方法:
(1).引入死锁预防协议,使系统不进入死锁状态:通过对加锁请求进行排序,一事务开始之前要先锁定所有的数据项

(2).允许系统进入死锁状态,引入死锁检测死锁恢复机制进行恢复。

(3).死锁的预防:
抢占与事务回滚技术:每一个事务赋予一个时间戳,若一个事务回滚,则当重启该事务时,必须保持原时间戳。然后采用wait-die或者wound-wait机制对事务进行排序。
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第16张图片
基于超时的机制:事先给出事务等待的时间,超时即回滚。

(4)死锁的检验:
等待图
高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制_第17张图片
等待图里没有环则说明事务没有进入死锁状态

(5)从死锁中恢复:
选择代价最小的事务进行回滚,但是可能会产生饿死的情况。解决饿死的方法:将回滚次数考虑在代价中,赋予一个优先权

你可能感兴趣的:(高级数据库技术 课程笔记四——事务并发调度的相关概念以及控制机制)