【数据库系统概论】数据库并发控制机制——并发控制的主要技术之封锁(Locking)

系统文章目录

数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统
数据库系统的三级模式和二级映射
数据库系统外部的体系结构
数据模型
关系数据库中的关系操作
SQL是什么?它有什么特点?
数据定义之基本表的定义/创建、修改和删除
数据定义之索引的创建、修改与删除
数据查询之单表查询。详细解释WHERE、OEDER BY、GROUP BY 和 HAVING
关系的完整性(实体完整性、参照完整性、用户定义的完整性)
事务(包括事务的基本概念和特性解释)
数据库恢复机制
数据库并发控制机制——并发操作带来的数据不一致性问题有哪些


  • 系统文章目录
  • 并发控制的主要技术
    • 封锁(Locking)
      • 封锁协议
      • 活锁
      • 死锁


并发控制的主要技术

产生三种数据不一致性的主要原因是并发操作破坏了事务的隔离性

并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性 。

并发控制的主要技术有:

  • 封锁(Locking)
  • 时间戳(Timestamp)
  • 乐观控制法
  • 多版本并发控制(MVCC)

封锁(Locking)

封锁的概念:封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

锁的类型:对一个数据对象的操作无非就是读和写两种。所以基本的锁的类型也有两种:

  • 排它锁(Exclusive Locks,简记为X锁)又称为写锁。若事务T数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这样保证了其他事务在T释放A上的锁之前不能再读取和修改A。

  • 共享锁(Share Locks,简记为S锁)又称为读锁。若事务T数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这样保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。


封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。 这个协议规定了何时申请X锁或S锁、持锁时间、何时释放等。

  • 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。所以一级封锁协议只规定了对修改数据的限制。所以可防止丢失修改。但是如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。
  • 二级封锁协议:是在一级封锁协议基础上增加对读数据的限制,也就是说事务T在读取数据R之前必须先对其 加S锁,读完后即可释放S锁。注意这里是读完之后立马就释放S锁,所以虽然可以防止丢失修改和读“脏”数据,但仍然可能出现不可重复读。
  • 三级封锁协议:是在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。在这里,对S锁的持有时间持续到事务结束。所以可以防止丢失修改、读脏数据和不可重复读。

三级协议的主要区别:什么操作需要申请封锁以及何时释放锁(即持锁时间)。
不同的封锁协议使事务达到的一致性级别不同。封锁协议级别越高,一致性程度越高。

在这里插入图片描述


活锁

是什么:如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形 。

如何避免:避免活锁的简单方法就是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,按请求封锁的先后次序对这些事务排队,该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。


死锁

是什么:产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。这就形成了死锁的局面。

如何解决:一是采取一定的措施来预防死锁的发生。二是采用一定手段定期诊断系统中有无死锁,若有那就解除。

  • 死锁的预防

    • 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。缺点在于对用到的所有数据进行加锁会扩大封锁的范围从而降低了系统的并发度。
    • 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。如在B+树索引结构中,可以规定封锁必须从根结点开始,然后是下一级的子女结点,逐级封锁。缺点在于随着数据的变化,去维护这样的封锁顺序非常困难。

    所以在操作系统中广为采用的预防死锁的策略并不太适合数据库的特点,数据库管理系统在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法。

  • 死锁的诊断与解除

    • 死锁的诊断有超时法等待图法。超时法很好理解,就是说如果一个事务的等待时间超过了规定的时限,就认为发生了死锁;等待图法就是定期生成并检测事务等待图中是否存在回路,如果发现图中存在回路,则表示系统中出现了死锁。
    • 解除死锁通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。

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

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

相关文章

Vue CLI组件通信

目录 一、组件通信简介1.什么是组件通信?2.组件之间如何通信3.组件关系分类4.通信解决方案5.父子通信流程6.父向子通信代码示例7.子向父通信代码示例8.总结 二、props1.Props 定义2.Props 作用3.特点4.代码演示 三、props校验1.思考2.作用3.语法4.代码演示 四、prop…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第四天-Linux管道练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

爬虫网易易盾滑块案例:某乎

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址,浏览器打开网站&#xff0…

Java十种经典排序算法详解与应用

数组的排序 前言 排序概念 排序是将一组数据,依据指定的顺序进行排列的过程。 排序是算法中的一部分,也叫排序算法。算法处理数据,而数据的处理最好是要找到他们的规律,这个规律中有很大一部分就是要进行排序,所以需…

python总结-装饰器

装饰器 装饰器解决日志问题(分三个版本)多个装饰器带参数的装饰器wraps装饰器内置装饰器property装饰器staticmethod装饰器classmethod装饰器 类装饰器 概念 装饰器来自 Decorator 的直译。什么叫装饰,就是装点、提供一些额 外的功能。在 pyt…

一个可能的网址服务器证书自动续期自动化实现脚本方案

需求背景: 目标: 您希望为您的网站启用HTTPS,以保护通信安全,并希望这个过程是免费的。 证书类型: 您需要获取SSL/TLS证书,并且希望证书能够自动续期,以确保网站不会因证书过期而停机。 服务器兼容性: 您希望生成的证…

idea2023连接gitee远程仓库

目录 1.在gitee创建远程仓库 2.在Idea里配置git 3.初始化本地仓库 4. 提交推送至远程仓库 注意:提前下好git工具、idea2023,注册gitee账号,本文不介绍 1.在gitee创建远程仓库 创建好后,复制远程仓库地址 2.在Idea里配置git ​ …

【MATLAB源码-第104期】基于matlab的MPSK和MQAM调制解调方式仿真,输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 MPSK(多相位键控) MPSK是一种基于载波相位变化的数字调制技术。它的核心原理是通过改变载波的相位来表示不同的数字信息。这种技术可以分为几个不同的级别,其中最常见的包括: 1…

【书生·浦语大模型实战营02】《轻松玩转书生·浦语大模型趣味Demo》学习笔记

《轻松玩转书生浦语大模型趣味Demo》 1、InternLM-Chat-7B 智能对话:生成 300 字的小故事 本节中我们将使用InternLM-Chat-7B 模型部署一个智能对话 Demo。 1.1 环境准备 在InternStudio平台中选择 A100(1/4) 的配置,镜像选择 Cuda11.7-conda&#x…

Rust组织下的其他项目介绍

按当前star数排序 rustlings https://rustlings.cool/ Rustlings是一个用于学习Rust编程语言的项目,提供小练习帮助熟悉Rust代码的阅读和编写。 需要安装Rust,然后可以使用提供的命令来运行练习并修复其中的错误。项目还提供了一些额外的学习资源&#x…

Linux系统使用超详细(八)~磁盘管理

目录 一、认识磁盘 二、磁盘运行机制 三、磁盘检查 3.1查找设备名称和分区号 3.1.1使用lsblk命令: 3.1.2使用fdisk命令: 3.1.3使用blkid命令: 3.2检查方向 3.2.1文件系统完整性: 3.2.2磁盘健康状态: 3.2.3磁…

# 2024年 外形自我改造计划(A)

2024年 自我改造计划(A) 一、前言 希望能在2024实现浴火重生,在这一年里我记录一下自我改造计划 二、生活习惯篇 生活习惯是决定一个人状态的关键要素,为了保持我的状态的持续,我需要保证我拥有一个相对良好的生活…

JDBC*

*JDBC数据库连接步骤 1.将JDBC驱动的jar添加到项目的依赖中。 2.加载JDBC驱动 例如: Class.forName("com.mysql.jdbc.Driver"); 3.连接数据库 例如: Connection con DriverManager.getConnection(URL,us…

html5实现好看的个人博客模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…

C语言第三方库Melon开箱即用之词法分析器使用

之前的文章中,笔者介绍了Linux/UNIX C语言库Melon的基本功能及框架使用。 本文将介绍Melon中的词法分析器组件。 Melon的Github仓库为:https://github.com/Water-Melon/Melon 词法分析器在Melon中并不依赖于自身框架,因此可以在不初始化框…

Core Web Vitals

Core Web Vitals 是 Google 提出的一组用于衡量网页用户体验质量的指标。它们专注于三个方面:加载性能(Largest Contentful Paint,LCP)、交互性(First Input Delay,FID)和视觉稳定性&#xff08…

2024 年江苏省职业院校技能大赛高职软件测试赛项规程

2024 年江苏省职业院校技能大赛高职软件测试赛项规程 需要竞赛资源可私信博主! 一、赛项名称 赛项编号:JSG202429 赛项名称:软件测试 赛项组别:高职学生组、高职教师组赛项归属专业大类:电子信息 二、竞赛目的 软件是…

详解Keras3.0 Callbacks API : TensorBoard(可视化工具)

TensorBoard TensorBoard是TensorFlow提供的可视化工具。需要安装TensorFlow才能使用此回调。此回调记录TensorBoard的事件,包括:度量汇总图、训练图可视化、重量直方图、采样剖面。 keras.callbacks.TensorBoard(log_dir"logs",histogram_…

vue3防抖函数封装与使用,以指令的形式使用

utils/debounce.js /*** 防抖函数* param {*} fn 函数* param {*} delay 暂停时间* returns */ export function debounce(fn, delay 500) {let timer nullreturn function (...args) {// console.log(arguments);// const args Array.from(arguments)if (timer) {clearTim…

docker部署simpleDocker

1,安装docker,请参考 linux安装docker 2,安装docker-compose,请参考 Docker-Compose 3,安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…