(数据库系统概论|王珊)第十一章并发控制-第五、六、七节:并发调度的可串行性、两段锁协议和封锁的粒度
文章目录
- 一:可串行化调度
- 二:冲突可串行化调度
- (1)冲突操作
- (2)可串行化调度的充分条件:冲突可串行化
- 三:两段锁协议
- 四:封锁的粒度
- (1)概念
- (2)选择封锁的原则
- (3)多粒度封锁
- A:多粒度树
- B:多粒度封锁协议
- (4)意向锁
一:可串行化调度
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化(serializable)调度。可串行性是并发事务正确调度的准则, 也即一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度
例如,下面有两个事务,分别包含下列操作
事务T1T_{1}T1: 读B、A=B+1、写回A;
事务T2T_{2}T2: 读A、B=A+1、写回B;
假设A、B初值均为2,两个事务最多只有两种串行执行策略
- T1T_{1}T1->T2T_{2}T2:A=3,B=4
- T2T_{2}T2->T1T_{1}T1:A=4,B=3
因此事务T1T_{1}T1和T2T_{2}T2不管怎样交叉并行运行,只有两种正确的结果(如上)。其他结果均是错误的,相应调度也称之为不可串行化调度
二:冲突可串行化调度
(1)冲突操作
冲突操作:是指不同事务对同一个数据的读写操作和写写操作。除此之外,其他操作均为不冲突操作
- Ri(x)R_{i}(x)Ri(x)与Wj(x)W_{j}(x)Wj(x):事务TiT_{i}Ti读x,事务TjT_{j}Tj写x
- Wi(x)W_{i}(x)Wi(x)与Wj(x)W_{j}(x)Wj(x):事务TiT_{i}Ti写x,事务TjT_{j}Tj写x
另外注意各种交换
- 不同事务的冲突操作不可交换
- 同一事务内部的两个操作不可交换
- 不同事务,同一数据的读读操作可以交换
- 不同事务,不同数据,无论读写均可交换
(2)可串行化调度的充分条件:冲突可串行化
冲突可串行化:一个调度SC在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度SC‘^{`}‘,如果SC‘^{`}‘是串行的,则称调度SC为冲突可串行化的调度。若一个调度是冲突可串行化的,那么它一定是可串行化的调度
- 注意:冲突可串行化调度是可串行化调度的充分条件,不是必要条件。也就是说有可能某个调度是可串行调度,但它却不是冲突可串行化调度
例如,现在有一个调度SC1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)r_{1}(A)w_{1}(A)r_{2}(A)w_{2}(A)r_{1}(B)w_{1}(B)r_{2}(B)w_{2}(B)r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
考察两个不同事务的交界处,看它是否满足交换的条件
交换后SC1变为了SC2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)r_{1}(A)w_{1}(A)r_{1}(B)w_{1}(B)r_{2}(A)w_{2}(A)r_{2}(B)w_{2}(B)r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B),它等价于一个串行调度T1T_{1}T1->T2T_{2}T2,因此SC1是冲突可串行化调度,也一定是一个可串行化调度
三:两段锁协议
两段锁协议(2PL):两段锁协议是三级封锁协议的特例,目前DBMS普遍采用该种协议实现并发调度的可串行性。具体内容如下
- 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁
- 在释放一个封锁之后,事务不再申请和获得任何其他封锁
其中“两段”是指事务分为两个阶段
- 第一阶段:获得封锁,也称为扩展阶段
- 第二阶段:释放封锁,也称为收缩阶段
另外还需要注意
- 事务遵守两段锁协议是可串行化调度的充分条件,而非必要条件
- 若并发事物都遵循两段锁协议,则对其的任何并发点都策略都是可串行化的
- 若对并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议
最后注意区分两段锁协议和一次封锁法
- 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议
- 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁
四:封锁的粒度
(1)概念
封锁粒度(granularity):是指封锁对象的大小。封锁对象可以是逻辑单元,也可以是物理单元。封锁粒度与系统并发度和并发控制的开销密切相关,一般来说,封锁粒度越大,数据库所能封锁的数据单元就越少,并发度越小,开销越小
- 逻辑单元:元组、关系、整个数据库等
- 物理单元:页(数据页或索引页)、物理记录等
(2)选择封锁的原则
- 需要处理多个关系的大量元组的用户事务时以数据库为封锁单位
- 需要处理大量元组的用户事务时以关系为封锁单元
- 只处理少量元组的用户事务时以元组为封锁单位
(3)多粒度封锁
多粒度封锁:在一个系统中同时支持多种封锁粒度供不同的事务选择
A:多粒度树
多粒度树是以树形结构来表示多级封锁粒度的方法
- 根结点是整个数据库,表示最大的数据粒度
- 叶结点表示最小的数据粒度
B:多粒度封锁协议
多粒度封锁协议:允许多粒度树中的每个结点被独立地加锁,对一个结点加锁意味着这个结点的所有后裔结点也会被加上相同类型的锁。因此,在多粒度封锁中一个数据对象可能存在如下两种封锁方式
- 显式封锁:直接加到数据库对象上的封锁
- 隐式封锁:由于上级结点加锁而使该数据对象也被加锁
多粒度封锁方法中,显式封锁和隐式封锁的效果是一样的,因此系统检查封锁冲突时不仅要检查显式封锁还要检查隐式封锁
- 例如事务TTT要对关系R1R_{1}R1加XXX锁,系统必须搜索其上级结点数据库、关系R1R_{1}R1以及R1R_{1}R1的下级结点,即R1R_{1}R1中的每一个元组,上下搜索。如果其中某一个数据对象已经加了不相容锁,则TTT必须等待
(4)意向锁
- 一般地,对某个数据对象加锁,系统要检查该数据对象上有无显式封锁与之冲突:再检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁(即由于上级结点已加的封锁造成的)冲突;还要检查其所有下级结点,看它们的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突
- 可以看出,这样的检查方法效率很低,因此意向锁由此诞生
意向锁:如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。有如下三种常用的意向锁
- 意向共享锁(IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁
- 意向排他锁(IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁
- 共享意向排他锁(SIX锁):如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX
锁相容矩阵
(数据库系统概论|王珊)第十一章并发控制-第五、六、七节:并发调度的可串行性、两段锁协议和封锁的粒度相关推荐
- 数据库系统概论:第十一章 并发控制
事务可以一个一个地串行执行,即每一个时刻只有一个事务正在运行,其他事务必须等迭代这个事务结束才能执行. 在单处理机中,事务的并发执行实际上是这些并行事务的并行操作轮流交叉运行.虽然单处理机系统中的并行 ...
- (数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化
注意: 关系代数有关符号,大家可能又不熟悉了,点击跳转:(数据库系统概论|王珊)第二章关系数据库-第四节:关系代数 文章目录 一:关系代数表达式等价变换规则 (1)连接.笛卡尔积.并.交的交换律 (2 ...
- (数据库系统概论|王珊)第二章关系数据库-第一节:关系数据结构及其形式化定义
文章目录 一:关系 (1)域 (2)笛卡尔积 (3)关系 A:基本概述 B:码相关概念 C:关系的三种类型 二:关系模式 三:关系数据库 (1)基本概念 (2)关系数据库的型与值 前面说过,数据模型由 ...
- (数据库系统概论|王珊)第一章绪论:习题
pdf下载:密码7281 专栏目录首页:[专栏必读](考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解 名词解释 数据:是数据库中存储的基本对象,是描述事物的符号记录 数据 ...
- (数据库系统概论|王珊)第二章关系数据库-第二节、第三节:关系操作和关系完整性
文章目录 一:关系操作 (1)基本的关系操作 (2)关系数据语言的分类 二:关系完整性约束 (1)实体完整性 (2)参照完整性 A:参照关系 B:外码 C:参照完整性规则 (3)用户自定义完整性 一: ...
- (数据库系统概论|王珊)第一章绪论-第三节:数据库系统的结构
文章目录 一:数据库系统模式的概念 (1)型和值 (2)模式和实例 二:三级模式 (1)模式(schema) (2)外模式(external schema) (3)内模式(internal schem ...
- (数据库系统概论|王珊)第一章绪论-第二节:数据模型
文章目录 一:什么是数据模型 二:两类数据模型 (1)概念模型(信息模型) A:定义 B:相关术语 C:概念模型的一种表示方法:实体-联系方法 (2)逻辑模型和物理模型 三:数据模型的组成要素 四:层 ...
- (数据库系统概论|王珊)第一章绪论-第一节:数据库系统概论
文章目录 一:四大基本概念 (1)数据(Data) (2)数据库(DataBase,DB) (3)数据库管理系统(DataBase Management System,DBMS) (4)数据库系统(D ...
- (数据库系统概论|王珊)第九章关系查询与关系优化:习题
名词解释 代数优化:是指关系代数表达式的优化,也即按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询更高效 物理优化:是指存取路径和底层操作算法的选择.选择依据可 ...
最新文章
- R可视化使用ggplot2将坐标轴设置为对数坐标轴(Log Scale)
- 互联网协议 — TLS — CA 认证
- 2012年度最受欢迎中国开源软件评选
- echarts地图json实现
- 安防专用交换机的应用介绍
- 电脑怎么结束进程_小协漫谈 | 聊聊电脑卡顿那些事
- 常见图片格式:PNG,JPG/JPEG,BMP
- Win10文件管理器那些你不知道的秘密
- Matlab网格划分
- 小米手机各种检测代码
- C++银行管理系统源代码
- java 中文星期表示_java之获得中文星期几
- echarts关系图
- 十字链表画法——蓝墨云班课实践改错
- 近观趣店,“审视”罗敏
- OSI七层参考模型及其协议和各层设备详解
- pat乙级1087C语言
- excel----身份证号校验位excel公式分析
- UVa 1471 Defense Lines (解释紫书思路)
- RGB与HSV等的转换
热门文章
- 别看程序员只是表面风光
- MySQL进阶:从删库到跑路
- 第九节:掌握vue的另一个核心:组件
- 整型数据类型java_Java 六种基本整型数据类型变量的取值范围
- python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
- XElement.Load 需要释放吗_奥施康定掰开后能当即释片用吗?
- 人类基因组计划20周年!中科院付巧妹团队登Science特刊,从古DNA中一窥人类演化...
- IT行业培训必读:优秀程序员的十个习惯
- 调整了canvas的高度页面变化后还原_Web 页面录屏实现
- 1.9 编程基础之二分查找 13:整数去重 python