【数据库概论】第十一章 数据库并发控制
第十一章 并发控制
在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务并行运行,这就是同时并发方式。当多个用户并发存取数据库时会产生多个事务同时存取同一事务的情况,如果对并发操作不加控制就可能破坏事务的一致性和数据库的一致性
11.1 并发控制概述
事务是并发控制的基本单位,保证食物的ACID特性是事务处理的重要任务。为了保证事务的隔离性和一致性,DBMS需要对并发操作进行正确的调度。
并发操作带来的数据不一致性包括以下几种情况:
1.丢失修改
两个事务T1和T2同时读入同一数据并修改,T2的提交结果破坏了T1的提交结果,导致T1修改被丢失。
2.不可重复读
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使得T1无法再现前一次的读取结果。包含三种情况:
- 事务T1读取数据后,T2对其进行了修改,T1再次读数据的时候,得到了与前一次不同的值
- 事务T1按一定条件从数据库读取了数据记录后,T2删除了部分记录,当T1再次读数据的时候,发现某些数据消失了。
- 事务T1按一定条件从数据库读取某些数据之后,T2插入了一些记录,当T1再次按相同条件读取数据的时候,发现多了一些记录
后两种不可重复读被称为数据幻影现象
3.读脏数据
指事务T1修改某一数据并且写回磁盘,T2读取到该数据后,T1事务被撤销了,则T2中读到的数据是被撤销前的数据,为脏数据。
上述三类数据不一致的主要原因是并发操作破坏了事务的隔离性,并发机制就是要用正确的方式调度并发操作,使得一个用户事务的执行不受其他事务干扰,来避免数据的不一致性
主要控制技术有封锁、时间戳、乐观控制法和多版本并发控制,下面依次介绍这些方法。
11.2 封锁
封锁是实现并发控制的一个非常重要的技术。封锁指的是事务T在对某个数据对象进行操作之前,先请求系统对该对象进行加锁,仅当他完成操作后才允许其他事务对该对象进行操作。
基本的封锁类型有两种:排他锁(exclusive lock,简称X锁)和共享锁(share lock,简称S锁)。
排他锁又称为写锁,一般写操作使用,事务T给数据对象A加X锁后,不允许任何事物给A加锁和访问A,直到T释放A上的锁.
共享锁又称为读锁,如果事物T对对象A加上S锁。则该事务可以读但不可以修改A,而且其他事务只能对A加S锁而不能加X锁,直到所有的S锁释放。
11.3 封锁协议
在运用封锁的时候,还需要约定一些规矩,这些协议被称为封锁协议。对封锁方式制定不同的规则,就形成了各种不同的封锁协议。
1.一级封锁协议
一级封锁协议是指,事务T在修改数据R之前必须对其先加X锁,直到事务结束的时候才释放。事务结束包括COMMIT和ROLLBACK。一级封锁协议可防止丢失修改,并且保证事务T是可以恢复的。在一级封锁协议中, 仅仅是读数据而不修改,是不需要加锁的,因此不能保证可重复读,也不能保证不读脏数据。
2.二级封锁协议
二级封锁协议是指,在以及封锁协议基础上增下了事务T在读取数据R前必须先对其加上S锁,读完后方可释放。
二级封锁协议可以防止丢失修改,并且进一步防止读取脏数据。
3.三级封锁协议
三级封锁协议是指,在以及封锁协议上增加了事务T在读取数据R之前必须先对其加上S锁,直到事务结束才释放
该跟锁协议出了防止丢失修改和读取脏数据外,还进一步防止了不可重复读。
上述封锁协议主要区别在于什么操作需要申请封锁,以及何时释放锁。
11.4 活锁和死锁
活锁
如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2开始等待;如果此时T3也请求封锁R,那么当T1释放了R上的封锁后会首先通过T3的封锁请求,如果后面还有源源不断的事务请求的话,T2会陷入持续忙等的情况,但是忙等的情况还是有机会解除的,这就说活锁
避免活锁的简单方法是采用先来先服务策略。
死锁
如果T1封锁R1,T2封锁了R2,此时T1申请封锁R2,而T2又申请封锁R1。此时就会导致死锁——两个事务互相需要彼此的资源,但是两者都不释放锁。这就类似于两个人互相持枪对峙,然后两边都要求对方先放下枪。
目前数据库中解决死锁主要有两类方法,一类是预防死锁的发生,一类是采用一定手段解除死锁。
1.死锁的预防
- 一次死锁法:要求每一个事务必须一次将所有的数据全部加锁,否则不能执行。这能够有效防止死锁的发生,但是由于扩大了封锁范围,降低了系统的并发度。第二,在动态运行时,一些数据原先不需要封锁的也可能变为要封锁的对象,事先难以精确确定每个事务要封锁的数据对象。也就是该法对于编译锁支持较好,但是对于动态运行时锁就有点无能为力了。
- 顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按照该顺序实施封锁。比如B树索引中,可以从根节点开始,逐步封锁下一层的节点。该法可以很有效地防止死锁,但是数据库中封锁的对象极多,要维护这样的资源的封锁顺序成本极高。而且事务的封锁请求会随着事物的执行而动态变化。
可见,在操作系统中普遍采用的死锁预防并不太适合数据库,因此DBMS在解决死锁问题上主要采用诊断并解除死锁的方法。
2.死锁的诊断与解除
数据库系统中诊断死锁的方法与操作系统类似,一般使用超时法或者事物等待图法。
- 超时法
如果一个事务等待时间显然超出了规定时限,则认为发生了死锁。该法很简单,但是可能会误判死锁,而且对超时时限的设置要求比较严格
一旦检测到系统中存在死锁,使用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务所有的锁,使得其他事务可以继续运行。
11.5 并发调度的可串行性
可串行化调度
多个事务正确地并发执行后的结果应该与按某一次序串行地执行这些事务时的结果相同
可串行性是并发事务正确调度的准则。
冲突操作指的是不同的事务对同一个数据的读写操作和写写操作。一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务的不冲突次序得到另外一个调度Sc‘,如果Sc’是串行的,则称Sc为冲突可串行化。如果一个调度是冲突可串行化的,则一定是可串行化调度。
冲突可串行化调度是可串行化调度的充分不必要条件
11.6 两段锁协议
为了保证并发调度的正确性,数据库管理系统的并发控制机制提供一定缩短来保证调度是可串行化的。目前普遍使用的是两段锁协议。
两段锁协议指所有事务必须分两个阶段对数据项进行加锁和解锁:
- 对任何数据进行读写操作之前,首先申请并获得对该数据的封锁
- 在释放一个封锁之后,事务不再申请和获得任何其他的封锁。
两段锁的含义是,事务分为两个阶段,第一阶段是获得封锁,这个阶段事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,这个阶段,事务可以释放任何数据项上的任何封锁,但是不能申请任何锁。
事务遵循两段锁协议是可串行化调度的充分条件,而不是必要条件。
11.7 封锁的粒度
封锁对象的大小称为封锁粒度。封锁的对象可以是逻辑单元,比如属性值的集合、元组、关系、索引等,也可以是物理项,比如页、物理记录等。
封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越大,数据库能封锁的数据单元越少,并发度越低;反之则并发度较高,但是由于需要调度系统资源,频繁加锁解锁,系统开销大。
如果一个系统中同时支持多种封锁粒度提供不同事务选择是比较理想的,这种封锁方法称为多粒度封锁
多粒度封锁
讨论多粒度封锁首先需要定义多粒度树。多粒度树的根节点是整个数据库,表示最大的数据粒度,叶节点表示最小的封锁粒度。比如如下一棵三级粒度树:
多粒度封锁协议允许多粒度树中每个节点被独立地加锁。对一个节点加锁代表着其后裔节点也被加以同样的锁。
因此,显示封锁指的是事务直接为数据对象加锁;隐式封锁是该数据对象没有被独立加锁,是由于其上级节点加锁而使得该数据对象加上了锁。
一般对某个数据对象加锁,系统除了要检查数据对象时有无显式封锁,还需要检查其上级节点有无被封锁,以及其所有子树节点。这样检查的效率很低,因此人们引进了一种新型锁——意向锁
意向锁
意向锁的含义是如果对一个节点加了意向锁,说明该节点的下层节点正在被封锁;对任意节点加锁时,必须先对他的上层节点加意向锁。
比如对任意元组加锁的时候,必须先对它所在的数据库和关系加意向锁。下面介绍三种常见意向锁:
11.8 其他并发控制机制
并发控制的方法出了封锁技术外还有时间戳方法、乐观控制法和多版本并发控制等。时间戳方法是给每一个事务盖上一个时标,并按照这个时间戳来解决事务的冲突操作
多版本并发控制
版本是指数据库中数据对象的一个快照,记录了数据对戏那个某个时刻的状态。
多版本并发控制和封锁机制相比,主要的好处是消除了数据库中数据对象的读和写操作的冲突,提高了系统性能。
相关文章:
【数据库概论】第十一章 数据库并发控制
第十一章 并发控制 在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务并行运行,这就是同时并发方式。当多个用户并发存取数据库时会产生多个事务同时存取同一事务的情况,如果…...
Nginx配置实例-反向代理案例二
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口服务 nginx监听端口为9000, 访问 http://127.0.0.1:9000/edu/ 直接跳转到127.0.0.1:8080 访问 http://127.0.0.1:9000/vod/ 直接跳转到127.0.0.1:8081 一、准备工作 1. 准备两个tom…...
HTML 字符集
为了正确显示 HTML 页面,Web 浏览器必须知道要使用哪个字符集。 从 ASCII 到 UTF-8 ASCII 是第一个字符编码标准。ASCII 定义了 128 种可以在互联网上使用的字符:数字(0-9)、英文字母(A-Z)和一些特殊字符…...
【C语言】每日刷题 —— 牛客语法篇(3)
前言 大家好,继续更新专栏c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博客…...
基于Vue3和element-plus实现一个完整的登录功能
先看一下最终要实现的效果:登录页面:注册页面:(1)引入element-plus组件库引入组件库的方式有好多种,在这里我就在main.js全局引入了.npm i element-plus -Smain.js中代码:import { createApp } from "vue"; //element-plus import ElementPlus from "element-pl…...
【java】Java 中泛型的实现原理
文章目录前序1. 泛型1.1 泛型方法1.2 泛型类1.3 泛型接口2. 泛型的基本原理3. 小结前序 泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码。本文总结了 Java 泛型的三种形式以及泛型实现原理。 1. 泛型 …...
【C++提高编程】C++全栈体系(二十七)
C提高编程 第五章 STL- 常用算法 三、常用排序算法 算法简介: sort //对容器内元素进行排序random_shuffle //洗牌 指定范围内的元素随机调整次序merge // 容器元素合并,并存储到另一容器中reverse // 反转指定范围的元素 1. sort 功能描述&#…...
软考高级信息系统项目管理师系列之三十九:项目集管理
软考高级信息系统项目管理师系列之三十九:项目集管理 一、项目集管理内容二、项目集管理基础概述1.项目集定义2.项目集活动3.项目集管理三、项目集的管理过程四、项目集治理1.项目集治理概述2.项目集指导委员会的职责3.项目集治理功能五、项目集生命周期1.项目集生命周期三个阶…...
44-Golang中的channel
Golang中的channel为什么要使用channelchannel的介绍channel的基本使用定义/声明channel管道的遍历和关闭channel的关闭channel的遍历goroutine和channel结合应用实例1应用实例2案例注意事项为什么要使用channel 前面使用全局变量加锁同步来解决goroutine的通讯,但…...
80/20法则
80/20法则(The 80/20 Rule)又称为帕累托法则(Pareto Principle)、二八定律、帕累托定律、最省力法则、不平衡原则、犹太法则、马特莱法则等一、什么是80/20法则80/20法则(The 80/20 Rule),又称为帕累托法则…...
计算机网络高频面试题(四)
一、什么是计算机网络 是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 按分布范围,计算机网络里有局域网LAN和广域网WAN, 其中局域网的代表以太网,以及这…...
[计算机组成原理(唐朔飞 第2版)]第三章 系统总线(学习复习笔记)
3.1 总线的基本概念 计算机系统的五大部件之间的互连方式有两种 各部件之间使用单独的连线,称为分散连接将各部件连到一组公共信息传输线上,称为总线连接 总线是连接多个部件的信息传输线,是各部件共享的传输介质。 当多个部件与总线相连时&…...
华为OD机试题 - 计算堆栈中的剩余数字(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:计算堆栈中的剩余数字题目输入输出描述示例一输入输出说明示例二…...
VB实现点爆炸效果
需在窗体放置以下 4 个控件,所有控件不用设置任何属性,均采用默认设置: ’ Picture1,Command1,Check1,Timer1 Option Explicit Dim I Dim ctD() As tyD, ctDs As Long, ctR As Single Private Type tyD x…...
ICG-alkyne,吲哚菁绿-炔基结构式,实验室科研试剂,CAS号:1622335-41-4
ICG-alkyne,吲哚菁绿-炔基 中文名称:吲哚菁绿-炔基 CAS号:1622335-41-4 英文名称:ICG-alkyne 英文别名:ICG-alk 性状:绿色粉末 化学式:C48H53N3O4S 分子量:768.03 溶剂:溶于…...
【并发编程】volatile的原理我好像又懂了
文章目录优秀引用1、概述2、可见性保证2.1、什么是可见性2.2、例子举证2.3、结果解析3、有序性保证3.1、什么是有序性3.2、什么是重排序3.3、例子举证4、无法保证原子性4.1、什么是原子性4.2、例子举证5、内存屏障5.1、什么是内存屏障5.2、不同内存屏障的作用6、volatile和sync…...
【已更新实例】Java网络爬虫-HttpClient工具类
关于用Java进行爬虫的资料网上实在少之又少,但作为以一名对Java刚刚初窥门径建立好兴趣的学生怎么能静得下心用新学的Python去写,毕竟Java是世界上最好的语言嘛 (狗头)关于Java爬虫最受欢迎的一个框架Jsoup常常搭配HttpClient来使用,因为Jsou…...
7.2 向量的坐标
🙌作者简介:数学与计算机科学学院出身、在职高校高等数学专任教师,分享学习经验、生活、 努力成为像代码一样有逻辑的人! 🌙个人主页:阿芒的主页 ⭐ 高等数学专栏介绍:本专栏系统地梳理高等数学…...
公式编写1000问21-22
21.问: 求助——(周,日,60分钟,30分钟)MACD同时向上的公式怎么表达 答(知无不言): z:“macd.dea#week”; r:“macd.dea#day”; f:“macd.dea#min60”; f1:“macd.dea#min30”; rz:“macd.dea##week”; rr:“macd.dea##day”; rf:“…...
1041 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试…...
2023年3月北京/广州/杭州/深圳数据治理工程师认证DAMA-CDGA/CDGP
DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...
【AICG】2、扩散模型 | 到底什么是扩散模型?
文章目录一、什么是扩散模型二、扩散模型相关定义2.1 符号和定义2.2 问题规范化三、可以提升的点参考论文:A Survey on Generative Diffusion Model github:https://github.com/chq1155/A-Survey-on-Generative-Diffusion-Model 一、什么是扩散模型 已…...
高等数学——多元函数微分学
文章目录多元函数微分学多元函数的极限多元函数的连续性偏导数定义高阶偏导数全微分定义全微分存在的必要条件全微分存在的充分条件多元函数的微分法复合函数微分法隐函数微分法多元函数的极值与最值无约束极值条件极值及拉格朗日乘数法最大值最小值二重积分概念性质计算利用直…...
一文打通Sleuth+Zipkin 服务链路追踪
1、为什么用 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要…...
牛客刷题第一弹
1.异常处理 都是Throwable的子类: ①.Exception(异常):是程序本身可以处理的异常。 ②.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需…...
K8s:通过 Kubeshark 体验 大白鲨(Wireshark)/TCPDump 监控 Kubernetes 集群
写在前面 分享一个 k8s 集群流量查看器很轻量的一个工具,监控方便博文内容涉及: Kubeshark 简单介绍Windows、Linux 下载运行监控DemoKubeshark 特性功能介绍 理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。…...
MySQL查询索引原则
文章目录 等值匹配原则最左前缀匹配原则范围查找规则等值匹配+范围查找Order By + limit 优化分组查询优化总结MySQL 是如何帮我们维护非主键索引的等值匹配原则 我们现在已经知道了如果是【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分…...
布谷鸟优化算法C++
#include <iostream> #include <vector> #include <cmath> #include <random> #include <time.h> #include <fstream> #define pi acos(-1) //5只布谷鸟 constexpr int NestNum 40; //pi值 //规定X,Y 的取值范围 constexpr double X_…...
三体到底是啥?用Python跑一遍就明白了
文章目录拉格朗日方程推导方程组微分方程算法化求解画图动图绘制温馨提示,只想看图的画直接跳到最后一节拉格朗日方程 此前所做的一切三体和太阳系的动画,都是基于牛顿力学的,而且直接对微分进行差分化,从而精度非常感人…...
Golang-Hello world
目录 安装 Go(如果尚未安装) 编写Hello world 使用Golang的外部包 自动下载需要的外部包...
处网站的建设/磁力在线搜索引擎
判断[_First,_Last)区间内的元素是否形成一个heap,意味着beg是最大值元素之一.使用operator<比较元素 判断[_First,_Last)区间内的元素是否形成一个heap,意味着beg是最大值元素之一.使用_Pred(elem1, elem2)完成比较,在elem1 < elem2的…...
南阳网站建设培训班/怎么引流推广自己的产品
首先默认情况下,innerHTML会被认为是不安全的,因此屏蔽掉了样式。 不生效场景 我们通过innerHTML引入一段html格式的文本,文本中有style样式,目标是希望字体是红色的,而实际效果却仍然是默认的黑色。 TS文件 impor…...
网站建设方案模板/seo优化技巧
v-bind 的使用 v-bind 主要用于属性绑定,比方你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定 使用示例: <!-- 绑定一个属性 --> <img v-b…...
建设银行网站功能介绍/seo技术培训东莞
IOS开发中 如果只想允许用户竖屏显示界面,只需要在Info.plist文件中,打开Supported interface orientation选项 然后只保留Portrait,其它(绿色箭头总会)的都删除就可以了。 转载于:https://www.cnblogs.com/vincent-gu…...
上海手机网站建设/网易最新消息新闻
MySQL的视图view,视图创建后,会随着表的改变而自动改变数据 1、首先是创建视图 CREATE ALGORITHMUNDEFINED DEFINERrootlocalhost SQL SECURITY DEFINER VIEW tge_view AS SELECT corpName, phone FROM t_gongshang_enterpriser;上面代码中的ÿ…...
lollipop Wordpress/seo查询5118
因为vue-cli2已经帮你配置好了scss的配置 你只管就是下载个依赖就完事了。由于sass版本太高会报错,所以就用了4.0.0版本的sass-loader cnpm install sass-loader4.x.x node-sass...