【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化

多种锁模式的封锁系统

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 多种锁模式的封锁系统
  • 前言
  • 概述
  • 共享锁与排它锁
  • 相容性矩阵
  • 其它锁模式
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

对于封锁模式的调度器,如何只用一种锁模式,虽然简单,但会存在这样的情况,当有两个事务对同一数据库元素分别进行读和写的动作时,此时它们是冲突的,只能串行进行;而当两个事务对同一数据库元素分别进行读操作时,也需要串行操作,这就有点说不过去了。

因此,在本文中将介绍多种锁模式,这更贴近实际的数据库使用,以及多种锁模式之间关系的规范方法。

共享锁与排它锁

对数据库元素的读,我们可以同时加锁,而对于写的操作,需要更加严格的锁,因为它既可以阻止写,也可以阻止读,这就是共享锁和排它锁模式的调度器。

  • 共享锁,可以多个事务同时获得共享锁,在加锁期间,只能进行读操作,不能进行写操作;当然读操作时,更倾向于加共享锁;
  • 排它锁,只能有一个事务加锁,在加锁期间,可以进行读操作,也可以进行写操作;而其它事务既不能加共享锁,也不能加排它锁。

当然共享锁和排它锁模式下,也是需要符合两阶段锁条件,同时满足事务一致性和调度一致性。

一个事务可能先获得到某个数据库元素的共享锁,之后又申请了该数据库元素的排它锁,如果此时没有冲突产生,这是可以的。在可预测的情况下,可以只申请排它锁,往往大多数情况下,我们在开始时,无法预测,所以会有这种情况的发生。

  • 调度举例
事务T1事务T2
slock(A); read(A);
slock(A); read(A);
slock(B); read(B);
xlock(B); 被拒绝
unlock(A);unlock(B);
xlock(B); write(B);
unlock(A);unlock(B);

相容性矩阵

存在几种锁模式时,当一个数据库元素已经有一个锁时,如果再来锁请求时,调度器需要一种策略,来判断是否可以继续加锁。
这里有一种方式,叫做相容性矩阵,它是一种简单的记录锁与申请锁之间的处理策略。

它由一个二维表来表示,列表是已经持有的锁,行表示正在申请的锁,它们交叉的地方表示是否继续可以加锁的策略。

拿共享锁和排它锁来举例,它的相容性矩阵如下:

申请的锁
共享锁排它锁
持有的锁共享锁
排它锁

只有共享锁是可以被多个事务同时持有,其它都是不可以。

其它锁模式

对于共享锁还可以有锁升级,升级到排它锁,这样就可以只持有一个锁;但是这也会产生死锁的风险。

这里可以引入第三种锁模式,设置另外的一种锁模式,更新锁,它可以由共享锁升级而来,但是它比共享锁严格,只有它可以升级到排它锁,同时与其它共享锁和排它锁请求冲突;

另外还有一种很有用的锁模式,增量锁;有这样一类操作,只对数据库元素递增或递减,此时就可以加增量锁。增量操作有一个特性,是可以交换的,如果两个事务都对一个数据库元素递增,谁先谁后结果都是一样的。这样增量锁是可以同时持有多个,但是它与共享锁和排它锁又是冲突的。

总结

通过本文,对于多种锁模式的介绍,真实数据库的调度器封锁机制的了解更加深入。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

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

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

相关文章

2024年美国大学生数学建模竞赛(MCM/ICM)论文写作方法指导

一、前言 谈笑有鸿儒,往来无白丁。鸟宿池边树,僧敲月下门。士为知己者死,女为悦己者容。吴楚东南坼,乾坤日夜浮。剪不断,理还乱,是离愁,别是一番滋味在心头。 重要提示:优秀论文的解…

LeeCode前端算法基础100题(5)- 最长公共前缀

一、问题详情: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog",&quo…

唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能

在现代化的电子产品中,音频功能的重要性日益凸显。无论是智能家居、玩具、医疗设备还是仪器仪表,富有吸引力的音效与语音提示都能显著提升用户体验。唯创知音WT2605C语音芯片MP3音频IC便是为了满足这一需求而诞生的,它具备指令随机播放、无缝…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、奇异值、托普利兹矩阵、汉克尔矩阵、范德蒙矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、矩阵的奇异值分解 1、奇异值 2、MATLAB计算 五、托普利兹矩…

HuggingFace学习笔记--BitFit高效微调

1--BitFit高效微调 BitFit,全称是 bias-term fine-tuning,其高效微调只去微调带有 bias 的参数,其余参数全部固定; 2--实例代码 from datasets import load_from_disk from transformers import AutoTokenizer, AutoModelForCaus…

python每日一题——20旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]]…

【每日OJ —— 226. 翻转二叉树】

每日OJ —— 226. 翻转二叉树 1.题目:226. 翻转二叉树2.解法2.1.算法讲解2.2.代码实现2.3.代码提交通过展示 1.题目:226. 翻转二叉树 2.解法 2.1.算法讲解 我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前…

持续集成交付CICD:CentOS 7 安装 Sonarqube9.6

目录 一、实验 1.CentOS 7 安装 Sonarqube9.6 二、问题 1.安装postgresql13服务端报错 2.postgresql13创建用户报错 一、实验 1.CentOS 7 安装 Sonarqube9.6 (1)下载软件及依赖包 ①Sonarqube9.6下载地址 https://binaries.sonarsource.com/Dis…

深度学习之基于yolov3学生课堂行为及专注力检测预警监督系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习技术在学生课堂行为及专注力检测预警监督系统的应用是一项极具挑战性和创新性的研究领域。利用YOLOv3&…

Docker常见命令介绍

命令说明 docker pull 拉取镜像 docker push 推送镜像到DockerRegistry docker images 查看本地镜像 docker rmi 删除本地镜像 docker run 创建并运行容器(不能重复创建) docker stop 停止指定容器 docker start 启动指定容器 docker rest…

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类…

揭秘原型链:探索 JavaScript 面向对象编程的核心(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

解决ubuntu编译aosp报错问题:error while loading shared libraries: libncurses.so.5

报错代码&#xff1a; or directory [ 0% 1036/154449] bc: libclcore.bc < frameworks/rs/driver/runtime/rs_quaternio FAILED: out/target/product/emulator_x86_64/obj/RENDERSCRIPT_BITCODE/libclcore.bc _intermediates/rs_quaternion.bc /bin/bash -c "PWD/pro…

第九节HarmonyOS 常用基础组件2-Image

一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;基础组件…

SmartSoftHelp8,Web前端性能提升,js,css,html 优化压缩工具

Web前端js&#xff0c;css&#xff0c;html 优化压缩工具 提高web 前端性能&#xff0c;访问速度优化专业工具 CSS&#xff0c;js&#xff0c;html 单文件&#xff0c;多文件 单个&#xff0c;批量压缩优化 web前端优化&#xff1a;减少空格&#xff0c;体积压缩&#xff0…

基于算能的国产AI边缘计算盒子8核心A53丨17.6Tops算力

边缘计算盒子 8核心A53丨17.6Tops算力 ● 可提供17.6TOPS&#xff08;INT8&#xff09;的峰值计算能力、2.2TFLOPS&#xff08;FP32&#xff09;的高精度算力&#xff0c;单芯片最高支持32路H.264 & H.265的实时解码能力。 ● 适配Caffe/TensorFlow/MxNet/PyTorch/ ONNX/…

Python 全栈体系【四阶】(一)

四阶&#xff1a;机器学习 - 深度学习 第一章 numpy 一、numpy 概述 Numerical Python&#xff0c;数值的 Python&#xff0c;补充了 Python 语言所欠缺的数值计算能力。 Numpy 是其它数据分析及机器学习库的底层库。 Numpy 完全标准 C 语言实现&#xff0c;运行效率充分优…

面试数据库八股文十问十答第一期

面试数据库八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 1.MySQL常见索引、 MySQL常见索引有: 主键索引、唯一索引、普通索引、全文索引、组合索引(最左前缀)主键索引特点&#xff1a;唯一性&#xff0c;非空&#xff0c;自增&#xff08;如果使用…

Ubuntu 安装 MySQL8 配置、授权、备份、远程连接

目录 0100 系统环境0200 下载0300 安装0400 服务管理0401 关闭、启动、重启服务0402 查看服务状态 0500 查看配置文件0600 账号管理0601 添加账号0602 删除账号0603 修改密码0604 忘记root密码 0700 自动备份0800 远程访问 0100 系统环境 [rootlocalhost ~]# cat /proc/versio…

338. 比特位计数

338. 比特位计数 和1相与就是1的个数。 class Solution {public int[] countBits(int n) {int[] count new int[n1];for(int i0; i<n;i) {int ji;int cnt 0;while(j!0){if((j&1) ! 0)cnt ;j>>1;}count[i] cnt;}return count;} }