当前位置: 首页 > news >正文

封锁-封锁模式(共享锁、排他锁)、封锁协议(两阶段封锁协议)

一、引言

1、封锁技术是目前大多数商用DBMS采用的并发控制技术,封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化

2、基于锁的并发控制的基本思想是:

当一个事务对需要访问的数据库对象,例如关系、元组等进行操作之前,要先向系统发出封锁请求,获得所访问的数据库对象上的锁,即对数据库对象进行加锁来限制并发的其他事务对这些数据对象的访问

3、DBMS采用的封锁模式均包括共享锁和排它锁,同时采用两阶段封锁协议来约定锁的使用,保证并发事务非串行调度的可串行化

二、封锁模式

由于事务对数据库对象的操作分为读操作和写操作,因此,常用的封锁模式中也有两种类型的锁,一种用于读,称作共享锁,简称S锁,又称作读锁

一种用于写,称作排他锁,简称X锁,又称作写锁

1、共享锁

(1)若事务T想读取数据库对象A而不更新A,事务T必须申请获得A上的共享锁

(2)若申请成功,则事务T在数据库对象A上加共享锁,事务T可以读A但不能写A

(3)事务T和其他事务只能再对A加共享锁,而不能加排他锁

这就保证了其他事务可以读A,但在事务T释放A上的共享锁之前,不能对A作任何更新

2、排他锁

(1)若事务T不仅要读取数据库对象A还要更新A ,事务T必须申请获得A上的排他锁

(2)若申请成功,则事务T在数据库对象A上加排他锁,事务T不仅可以读A还能写A

(3)事务T和其他事务不能对A加任何类型的锁

 这就保证了在事务T释放A上的排他锁之前,其它事务不能再读取和更新A

3、对于任何数据库对象A,其上只能有一个排他锁,或者没有排他锁而有多个共享锁,也就是有多个事务可以同时读取A,但只能有一个事务读取并更新A

4、为了使并发执行的事务提早执行或提前完成,提高事务的执行效率。如果一个事务T想要读数据库对象A并可能更新A,应首先申请A上的一个共享锁,获得A上的共享锁后,友好地对待其他事务,允许其他事务申请并获得A上的共享锁,同时读取A,而仅当事务T准备为A写入新值时,再申请将加在A上的共享锁升级为排他锁。而事务T的锁升级请求是否会得到满足,则要看此时数据库对象A上的加锁情况

5、在同一数据库对象上已经被某事务加锁的情况下,并发控制机制能否同意其他事务的封锁申请的策略,可用一个锁相容矩阵来描述

在锁相容矩阵中,最左边一列表示在某数据库对象事务T1已经获得的锁,S为共享锁,X为排他锁,—表示没有加锁,最上边一行表示另一事务T2该数据库对象发出的封锁请求,T2的封锁请求能否被满足,用矩阵中的Y和N来表示,Y即YES,表示T2申请的锁与T1已拥有的锁相容,封锁请求可以满足,N即NO,表示事务T2申请的锁与T1已持有的锁冲突,T2的封锁请求被拒绝

6、现在我们知道如何使用锁了,对于我们上一节所提到的这个非可串行化的调度,如果我们在调度中,当事务对需要访问的数据库对象进行操作之前,要先向系统发出封锁申请,在读之前申请读锁并获得锁,在写之前升级为写锁并获得锁,写完释放锁。

这里用Slock(A)表示在某数据对象A上加上共享锁,Xlock(A)表示在A上加上排他锁,Unlock(A)表示释放A上的锁,也称解锁。可以发现,虽然我们正确地进行了封锁操作,但并没有解决该并发事务的非可串行化问题

三、封锁协议

1、在利用封锁技术对并发事务进行操作时,需要对事务何时申请要访问的数据库对象上的锁何时释放所获得的锁等约定一些规则,即封锁协议

2、约定不同的规则就形成了各种不同的封锁协议

3、两阶段封锁协议是最常用的一种实现可串行化的封锁协议

四、两阶段封锁协议

两阶段封锁协议对事务调度中的封锁操作的顺序进行限制,要求在每个事务中,所有的加锁操作优先于所有解锁操作,即每个事务在对数据库对象进行封锁时,必须分获得锁和释放锁两个阶段

1、第一阶段是获得锁阶段,也称扩展阶段

  • 在这个阶段,事务要申请得到完成事务操作所需要的所有锁,只能申请锁不能释放锁

2、第二阶段是释放锁阶段,也称收缩阶段 

  • 在这个阶段,事务释放所获得的所有锁不能再申请任何锁

若事务遵循两阶段封锁协议,其封锁操作序列应类似这种形式

先是对需要访问的各数据对象加锁,然后再开始释放锁,实际应用中,为了便于阶段的划分,通常将释放锁阶段放在事务结束时的COMMIT或ROLLBACK操作中完成

因此许多DBMS的并发控制机制,采用严格的两阶段封锁协议实现并发事务的可串行化

3、其协议规则包含如下具体内容

  • 事务T在读一个数据库对象前,必须获得该数据库对象上的读锁,如果没有其他事务拥有这个数据库对象上的写锁,那么事务T的封锁请求得到满足,操作继续执行
  • 事务T在更新一个数据库对象前,必须获得该数据库对象上的写锁,如果没有其他事务拥有这个数据库对象上的读锁或写锁,那么事务T的封锁请求得到满足,操作继续执行。若事务T已具有该数据库对象上的读锁,则必须将读锁升级为写锁,也必须获得该数据库对象上的写锁
  • 若事务B的封锁请求与事务A已获得的锁不相容时,事务B将处于等待状态,直到事务A释放其所拥有的锁为止
  • 事务所获得的锁将一直保持到事务结束才释放。即直到事务提交或终止且提交或终止日志记录已被刷新到磁盘后,事务才允许释放锁

这就是严格封锁协议的要求

3、前面我们对这个非串行化调度进行的封锁操作,并没有解决并发事务的非可串行化问题。若采用严格的两阶段封锁协议,事务T1在读取数据库对象X之前,申请并获得读锁,写数据库对象之前升级读锁为写锁,写后并没有释放锁,然后事务T2对数据库对象X申请的读锁,与事务T1已持有的数据库对象X上的写锁不相容,封锁请求得不到满足,事务T2处于等待状态,事务T1继续完成对数据库对象Y的读写,事务执行完成,提交后才释放数据库对象X和Y上的锁,事务T2才能够开始执行,事务T2在事务T1释放锁之前被拒绝执行,推迟了将导致非可串行化的操作的执行,调度的执行实际上相当于事务T1先于T2的一个串行调度,实现了并发事务的可串行化

4、对于我们在上一节讨论的并发事务带来的数据不一致问题,比如“脏读”问题,事务T1在完成之前发生了故障,需撤销回滚,事务T2读取了夭折事务T1对X的中间更新结果,是一个脏数据

若采用严格两阶段封锁协议进行并发控制,在事务T2因对数据库对象X申请的读锁与事务T1已持有的数据库对象上的写锁不相容而处于等待状态时,事务T1在完成之前发生了故障,则事务T1终止并撤销回滚,将X的值恢复为事务开始时的值,事务T1结束才释放所持有的数据对象X上的锁,事务T2才能够开始执行,此时事务T2读取的是夭折事务T1 ROLLBACK后的值,即事务T1没执行前的值,是数据库处于一致性状态时的值,不再是脏数据 

五、小结

1、封锁技术通过共享锁间的相容性,以及排他锁的排他性,使得并发调度中的非冲突操作并发执行,冲突操作串行执行,实现了冲突可串行化

2、采用封锁技术进行并发控制的DBMS,在具体实现时使用的锁类型,除了共享锁和排他锁两种基本锁外,为了事务能够高效地并发执行并减少死锁的发生,还会使用一些其他类型的锁,形成相应的封锁策略及对应的锁相容矩阵,以及采用更能便于应用执行的封锁协议,而不一定是可串行化的严格的两阶段封锁协议

相关文章:

封锁-封锁模式(共享锁、排他锁)、封锁协议(两阶段封锁协议)

一、引言 1、封锁技术是目前大多数商用DBMS采用的并发控制技术,封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化 2、基于锁的并发控制的基本思想是: 当一个事务对需要访问的数据库对象,例如关系、元组等进行操作…...

跨境干货|最新注册Google账号方法分享

谷歌账号对做跨境外贸业务的人来说是刚需,目前来说大部分的海外社媒平台、工具都可以用谷歌账号来注册。但是仍然有很多朋友并不知道如何注册这个谷歌账号,今天就来给大家分享2个注册谷歌账号的方法,一个是手机号注册,一个是如何跳…...

MySQL第三天作业

一、在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录 记录中id字段的值为1,name字段的值为"monkey"…...

网络安全应急处理流程

网络安全应急处理流程是指在发生网络安全事件时,组织应采取的一系列措施,以快速响应、控制、恢复和调查网络安全事件,确保业务连续性和数据安全。以下是一个详细的网络安全应急处理流程: 1. 准备阶段 目标:建立和维护…...

昇思25天学习打卡营第12天 | LLM原理和实践:MindNLP ChatGLM-6B StreamChat

1. MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 ChatGLM-6B应该是国内第一个发布的可以在消费级显卡上进行推理部署的国产开源大模型,2023年3月就发布了。我在23年6月份的时候就在自己的笔记本电脑上部署测试过,当…...

中英双语介绍加拿大多伦多(Toronto)

中文版 多伦多概述 多伦多(Toronto)是加拿大最大的城市,也是北美地区重要的经济、文化和金融中心。以下是对多伦多的详细介绍,包括其经济地位、金融中心、人口、地理位置、高等教育、移民政策、著名景点和居住的名人等方面的信息…...

【YOLOv9教程】如何使用YOLOv9进行图像与视频检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

Text2SQL提问中包括时间的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

点胶系统实战1-项目介绍

准备实战开发如下图的多轴点胶系统实战课程,内容设计界面开发、运动板块开发、任务管理、点胶的控制等。我们将和进入这个领域的初学者门一起进步。 有感兴趣的小伙伴,可以关注点赞,或评论区反馈你们的重点关注的内容,那些部分我…...

【MYSQL】InnoDB引擎为什么选可重复读作为默认隔离级别

InnoDB引擎为什么选可重复读作为默认隔离级别 一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle、SQL Server等,而MySQL却使用可重复读(Read-Repeatable&#x…...

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…...

基于Android Studio订餐管理项目

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 能够实现登录&#xff0c;注册、首页、订餐、购物车&#xff0c;我的。 用户注册后&#xff0c;登陆客户端即可完成订餐、浏览菜谱等功能&#xff0c;点餐&#xff0c;加入购物车&#xff0c;结算&#xff0c;以及删减…...

华为OSPF配置DR和BDR与指定DR

基础配置 <Huawei>sys #进入配置模式 Enter system view, return user view with CtrlZ. [Huawei]un in en #关闭报文弹窗 Info: Information center is disabled. [Huawei]sys R1 #设备名更改为R1 [R1]int g0/0/0 …...

【学习笔记】程序设计竞赛

程序设计竞赛 文章目录 程序设计竞赛0x00 基本操作指南0x01 算法分析0x02 STL和基本数据结构栈队列集合map 0x03 排序插入排序归并排序&#xff08;Merge Sort)快速排序 0x04 搜索技术BFSDFS回溯与剪枝 深度迭代ID A*A star双向广搜 0x05 递推方程0x06 高级数据结构并查集二叉树…...

11-云服务器处理单细胞转录组数据

目录 安装R及相关包 安装 shiny 进行安装包 安装BiocManager 安装Seurat包 网页端Rstudio需打开8787端口 Ubuntu上安装R包linux库缺失 关于服务器配置及相关处理可见:linux学习笔记_hx2024的博客-CSDN博客 安装R及相关包 8-阿里云服务器 ECS配置R及Studio Server-CS…...

vs+qt5.0 使用poppler-qt5 操作库获取pdf所有文本输出到txt操作

先获取poppler库&#xff0c;编译出lib与dll&#xff0c;配置好依赖环境&#xff0c;获取某页所有文本&#xff1a; QList<QString> PDFkitEngine::GetText(int nPageNum) { QList<QString> lstText; Poppler::Page* pPage NULL; pPage GetPage(nPageNu…...

[AIGC] ClickHouse分布式表与本地表的区别及如何查询所有本地表记录

在大规模数据处理和分析场景中&#xff0c;ClickHouse是一种高性能的列式数据库管理系统。ClickHouse支持分布式表和本地表两种表类型&#xff0c;本文将介绍这两种表类型的区别&#xff0c;并探讨如何建表以查询所有本地表的记录。 文章目录 一、ClickHouse分布式表与本地表的…...

202406 CCF-GESP Python 四级试题及详细答案注释

202406 CCF-GESP Python 四级试题及详细答案注释 1 单选题(每题 2 分,共 30 分)第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C. 3 D. 4答案:C解析:目前CCF组织的GESP认证考试有C++、Pyth…...

政安晨:【Keras机器学习示例演绎】(五十二)—— 使用门控残差和变量选择网络进行分类

目录 简介 数据集 安装准备 数据准备 定义数据集元数据 创建用于训练和评估的 tf.data.Dataset 创建模型输入 对输入特征进行编码 实施门控线性单元 实施门控余留网络 实施变量选择网络 创建门控残差和变量选择网络模型 编译、训练和评估模型 政安晨的个人主页:政…...

Spring AOP、Spring MVC工作原理、发展演变、常用注解

Spring AOP 概念 AOP全称为Aspect Oriented Programming&#xff0c;表示面向切面编程。切面指的是将那些与业务无关&#xff0c;但业务模块都需要使用的功能封装起来的技术。 AOP基本术语 **连接点&#xff08;Joinpoint&#xff09;&#xff1a;**连接点就是被拦截到的程序执…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...