数据库 06-02 并发控制(锁,死锁,多粒度)

news2024/11/24 16:37:06

01
在这里插入图片描述
02.
互斥访问数据
在这里插入图片描述
分成两种:
在这里插入图片描述
事务控制器的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

共享锁之间可以相容,但是任何一个共享锁和每一种排他锁都是互斥的
在这里插入图片描述
申请共享锁的命令和申请排他锁命令
在这里插入图片描述
如果存在排他锁,必须等待
在这里插入图片描述
只要对一个数据项,有读写方法,就必须要申请锁(无论是什么锁),最后一次访问,关掉锁
在这里插入图片描述
例子:T1转账 ,T2显示金额 和 A+B账户的总体金额
在这里插入图片描述
在这里插入图片描述
另一个例子:
这个例子显示的事A+B=250在这里插入图片描述
在这里插入图片描述
解释说明,在事务控制器在授予事务锁的时候,这个期间其他事务不能运行:

事务申请锁,事务控制器授予锁
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述锁导致的死锁的问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
锁的优缺点:
在这里插入图片描述

总体上说锁的使用还是优点多于缺点
在这里插入图片描述
锁带来的事务优先级,如果两个锁之间不相容的话,先获得其中一个锁的事务,优先级更高
在这里插入图片描述
这个和之前的指令优先级类似

封锁协议:
在这里插入图片描述在这里插入图片描述

封锁协议中调度的合法问题
在这里插入图片描述
锁的授予:

T2有数据项A的共享锁,T1申请这个数据项A的排他锁,T2会等待
T3申请这个数据项A的共享锁,T2会直接申请到数据项A
如果T2完成操作,还有T3还在数据项A,如果在此期间,还有T4申请数据项A 的共享锁
T1需要等待T3,T4都要操作完成后,才可以访问。也许要等好久才可以。这回叫做饿死
在这里插入图片描述
处理饿死的方法:
T2是符合第二种的,事务控制器不会让T3申请数据项A的共享锁成功
T1在运行期间,根本不会让T2区申请数据项A的排他锁的,这个是第一种

在这里插入图片描述
两阶段封锁协议

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
T3,T4是两阶段
在这里插入图片描述
T1,T2不是两阶段
在这里插入图片描述
加锁的最后一步指令,可以认为是封锁点,锁可以更加直接的反应指令之间按是否冲突,这也就是看出来指令冲突可串行—调度可串行
在这里插入图片描述
两阶段只能保证数据访问顺序,间接保证程序按照想要的顺序执行,不能保证死锁,死锁是两个互斥资源都加锁都还相互访问,这系列个动作导致的
在这里插入图片描述
在这里插入图片描述
两阶段只能保证数据访问顺序,间接保证程序按照想要的顺序执行,不能保证级联回滚,这个和提交有关
在这里插入图片描述

在这里插入图片描述
严格两阶段封锁协议----------------- 申请的锁只能是排他锁 提交事务后才可以释放锁:
这样就能实现另一个事务的对一个数据项A读方法,只能在已经操作数据项A的事务提交之后,才可以运行------无级联------------排他锁在起作用
在这里插入图片描述
强两阶段封锁协议----------------- 提交事务后才可以释放锁:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时共享锁没有作用,不能控制T8中的写方法和T9的读方法执行的顺序,从而保证结果
在这里插入图片描述
锁升级和锁降级
在这里插入图片描述
在这里插入图片描述
但是升级操作有条件:

在这里插入图片描述

在这里插入图片描述

两阶段封锁协议+锁转换 ----------------冲突可串行化的调度

两阶段封锁协议+锁转换 +(排他锁直到事务结束释放)=强两阶段封锁协议+锁转换-------------调度串行无级联

在这里插入图片描述
在这里插入图片描述
强两阶段封锁协议+锁升级的实现:

在这里插入图片描述

封锁(申请锁)的实现:
在这里插入图片描述

在这里插入图片描述
例子:

在这里插入图片描述
锁管理器操作:
在这里插入图片描述

在这里插入图片描述

图的协议:
在这里插入图片描述

在这里插入图片描述
树形协议,只用排他锁
在这里插入图片描述
有向无环图:
可以使用DFS,找出是否存在环:从某个顶点v 0出发,进行DFS,若存在一条从顶点到已访问顶点的回边(即遍历到同一个点两次),则有向图中存在环。

在这里插入图片描述在这里插入图片描述
父节点-----子节点

T10
B—E,D D----G

T11
D—H

T12
B—E

T13
D—H

保证不产生死锁--------冲突可串行
在这里插入图片描述

在这里插入图片描述
改进保证事务的可恢复性:
Ti执行了一些没有提交的数据的读操作,这样,在这个数据项最后的写操作所在的事务,会记录Ti存在依赖,这个事务没有提交,Ti不能提交
在这里插入图片描述
优缺点
在这里插入图片描述
死锁的处理:
在这里插入图片描述
死锁预防:
在这里插入图片描述
01.第一种
在这里插入图片描述
在这里插入图片描述
变形:
在这里插入图片描述
例子:树形协议

02.第二种
在这里插入图片描述
比较时间戳
时间戳比较年轻的等待
在这里插入图片描述

时间戳比较年轻的抢占
在这里插入图片描述
锁超时:
在这里插入图片描述
死锁检测:
用等待图
在这里插入图片描述
例子:
在这里插入图片描述

在这里插入图片描述
检测算法如何工作的:

在这里插入图片描述
死锁恢复
在这里插入图片描述
01.
在这里插入图片描述
在这里插入图片描述
02.
在这里插入图片描述
03.
在这里插入图片描述
多粒度
在这里插入图片描述
例子:
在这里插入图片描述
解释:和树形协议不一样,多粒度是有层次的结构,树形协议都是独立的数据项
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
父节点显式上锁,属于这个父节点的子节点也会隐式上锁(同一种锁): 父控制子
在这里插入图片描述
实现的过程:
其他事务对隐形加锁的子节点进行上锁时候,子结点要进行路径遍历,路径中有不兼容的锁(与申请的锁类型不同)类型,就拒绝

在这里插入图片描述

扩展: 子结点的锁类型也应该和父节点一样 (子控制父)

一行 = 一个数据项A 子结点如果上锁,那么父结点 只能上一样的锁, 否则就会出现父结点允许而子结点不允许的情况发生,这个和父结点锁的意义不符合

表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加 S 锁,如果表中的一行已被另外的事务加了 X 锁,那么该锁的申请也应被阻塞。

例子:

根结点想要上锁,如果其中的子结点有已经上锁的情况,就可能出现冲突,要遍历根以下的所有结点查看锁的类型是不是一样,所以根结点这个时候上锁很浪费时间
在这里插入图片描述

方法:

意向锁:

意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中
每行记录的锁标志位了,系统效率得以大大提高。
在这里插入图片描述
例如:

一个结点的加s锁或者x锁的时候:
结点本身的所有祖先结点都加上意向锁,
结点的子结点都要显式加锁(s锁或者x锁)
在这里插入图片描述
这里说的是父结点就可以不用搜索全部子结点,直接加锁:
在这里插入图片描述
过程:
在这里插入图片描述

解释:

行级锁(Row-Level Locking):
行级锁是指在数据库表中对每一行数据进行锁定,只有被锁定的行才不能被其他事务修改。行级锁可以实现更细粒度的锁控制,允许多个事务同时修改不同的行数据而不相互干扰。然而,行级锁会引入额外的开销,可能导致死锁和性能问题。

表级锁(Table-Level Locking):
表级锁是指对整个数据库表进行锁定,当一个事务获取了表级锁时,其他事务无法访问该表的任何数据。表级锁的控制粒度较大,会导致并发性能下降,因为只有一个事务可以访问整个表。

意向锁的存在是为了协调行锁和表锁的关系,支持多粒度(表锁与行锁)的锁并存。

意向共享锁(IS)表示事务意图在表中的单个行(一个数据项)上设置共享锁。

意向排他锁(IX)表明事务意图在表中的单个行(一个数据项)上设置独占锁。

例子:
事务A修改user表的记录r,会给记录r上一把行级的排他锁(X),同时会给user表上一把意向排他锁(IX),
这时事务B要给user表上一个表级的排他锁就会被阻塞。
意向锁通过这种方式实现了行锁和表锁共存且满足事务隔离性的要求。

意向锁的种类:

在这里插入图片描述

三种:
意向共享锁(IS):如果要对一个数据库对象加S锁,首先要对其上级结点加IS 锁,表示它的后裔结点拟(意向)加 S锁,子结点只能显式的设置共享锁;
意向排他锁(IX):如果要对一个数据库对象加X 锁,首先要对其上级结点加 IX锁,表示它的后裔结点拟(意向)加X 锁。子结点只能显式设置独占锁。
在这里插入图片描述

共享意向排它锁(Shared Intent Exclusive Lock,简称 SIX 锁) :如果对一个数据库对象加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX=S+IX。例如:事务对某个表加 SIX 锁,则表示该事务要读整个表(所以要对该表加S 锁),同时会更新个别行(所以要对该表加 IX锁),要更新的个别行加X锁。
在这里插入图片描述

IS 共享型意向锁
IX 排他型意向锁
S 共享锁
SIX 共享排他意向锁
X 排他锁
在这里插入图片描述
多粒度和意向锁的配合使用
在这里插入图片描述
例子:
T21读操作,T22写操作,T23读操作,T24读数据库操作

T21读操作,T22写操作 可以并发 是因为数据库DB结点,区域A1,文件Fa结点 中 IS,IX兼容 一个结点 可以共存这两种锁
T22写操作,T23读操作 不可以并发 是因为在文件Fa结点中 IX,S 不兼容 一个结点 不可以共存这两种锁
T22写操作,T24读操作 不可以并发 是因为在数据库DB结点中 IX,S 不兼容 一个结点 不可以共存这两种锁
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony南向开发实例:【智能甲醛检测机】

样例简介 本项目是基于BearPi套件开发的智能甲醛检测系统Demo,该设备硬件部分主要由小熊派单板套件和和甲醛检测传感器组成。智能甲醛检测系统可以通过云和手机建立连接,可以在手机上设置甲醛浓度阈值,传感器感知到的甲醛浓度超过阈值之后&a…

202458读书笔记|《风来自你的方向》——我每次见你时的百米冲刺,加起来就是一生的长跑

《风来自你的方向》隔花人著 大绵羊BOBO绘,狗狗🐶绘本,这是看的第3本书。上俩本是《我是你的小狗 狗狗心事绘本》,《我是你的小狗2 当我有了你》。 同样的简短文字小狗🐶漫画,有爱的主人,有趣…

ssm033单位人事管理系统+jsp

单位人事管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本单位人事管理系统就是在这样的大环境下诞生,其可以帮助管理者在短…

Python从0到100(十一):Python字典介绍及运用

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

vue实现富文本编辑器的具体方法

可以实现富文本的插件:vue-quill-editor、editor-for-vue 我们以 editor-for-vue 为例实现: 传送门:wangEditor官网地址 安装: npm install wangeditor/editor --save npm install wangeditor/editor-for-vue --save具体使用方…

实景三维在交通与物流管理中的应用

随着信息技术的不断发展,实景三维技术在交通与物流领域的应用逐渐受到人们的关注。实景三维技术是一种基于计算机视觉和图像处理技术的空间信息采集和处理技术,它能够将现实世界中的三维场景进行高精度、高清晰度的数字化重建,为交通与物流领…

机器学习模型——GBDT和Xgboost

GBDT基本概念: GBDT(Gradient Boosting Decision Tree,简称GBDT)梯度提升决策树,是Gradient Boost 框架下使用较多的一种模型,且在GBDT中,其基学习器是分类回归树也就是CART,且使用…

三极管做简易音频放大器步骤

已知:使用NPN三极管,输入的信号为0mV到几十mV的交流电,设计一个简单的音频放大器。 分析1:输入的交流信号信号无法打开NPN三极管,所以需要直流电源使三极管一直处于放大状态,再让交流信号影响输出信号&…

小米汽车:搅动市场的鲶鱼or价格战砧板上的鱼肉?

3月28日晚,备受关注的小米汽车上市发布会召开,小米集团董事长雷军宣布小米SU7正式发布。小米汽车在带飞股价的同时,二轮订购迅速售尽。 图一:小米集团股价 雷军口中“小米汽车迈出的第一步,也是人生最后一战的开篇”&a…

蓝桥杯刷题-16-买瓜-DFS+剪枝优化⭐⭐

蓝桥杯2023年第十四届省赛真题-买瓜 该如何剪枝呢?⭐⭐ 如果当前方案的切的刀数,已经大于等于了之前已知合法方案的最优解,那么就没必要 往后搜了。如果后面的瓜的总和加起来,再加上当前已有的重量,都不到m,那么也没…

千视携 NDI 6 轻量化媒体方案亮相北京CCBN展会

展会简介 第30届中国国际广播电视网络技术展览会(CCBN)将于4月24至26日在北京首钢会展中心举行。此次展会将汇集全球各大数字媒体、广播电视单位以及IT、通信技术厂商。展会重点关注数字化转型、智能媒体、融媒体等主题,并展示最新的5G、4K/8…

12.java openCV4.x 入门-HighGui之图像窗口显示

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

Ubuntu Desktop 免费的文件 / 目录差异比较工具 (Beyond Compare 为收费软件)

Ubuntu Desktop 免费的文件 / 目录差异比较工具 [Beyond Compare 为收费软件] 1. Installation2. Meld Diff Viewer3. Lock to LauncherReferences Meld - Visual diff and merge tool https://meldmerge.org/ Meld helps you compare files, directories, and version contro…

自动化测试大总结

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

嵌入式学习51-单片机4

知识零碎: nop空指令 CRC校验 为了保证51单片与温度传感18b20 之间的高电平 采用一个上拉电阻改变电平的高低 温度寄存器原理

NIKKE胜利女神PC怎么设置中文 手把手教你设置中文教程

这个游戏中的妮姬分四个企业,其中朝圣者这个派别的妮姬很少而且不在愿望单理,朝圣者的所有姐姐都很哇塞,红莲更是其中的大姐大。一般想抽朝圣者只能靠歪或者出限定卡池,举个栗子,我入坑的时候 朝圣者 神罚 是限定卡池&…

C++——栈和队列容器

前言:这篇文章我们将栈和队列两个容器放在一起进行分享,因为这两个要分享的知识较少,而且两者在结构上有很多相似之处,比如栈只能在栈顶操作,队列只能在队头和队尾操作。 不同于前边所分享的三种容器,这篇…

设计模式-结构型-装饰器模式-decorator

发票基本类 public class Invoice {public void printInvoice() {System.out.println("打印发票正文");} } 发票正文类 public class Decorator extends Invoice {protected Invoice ticket;public Decorator(Invoice ticket) {this.ticket ticket;}Overridepubl…

WebKit是什么?

WebKit是一个开源的浏览器引擎,它用于呈现网页内容在许多现代浏览器中,包括Safari浏览器、iOS内置浏览器、以及一些其他浏览器如Google Chrome的早期版本。以下是一些关于WebKit的重要信息: 起源和发展:WebKit最初是由苹果公司为其…

P8707 [蓝桥杯 2020 省 AB1] 走方格

原题链接:[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意:现在有个人站在第 1 行第 1 列,要走到第 i 行第 j 列(每次只能向右或者向下走)&#xff0…