【数据库】基于封锁的数据库调度器,以及等待锁处理的优先级策略

封锁调度器的体系结构

专栏内容

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

开源贡献

  • toadb开源库

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

文章目录

  • 封锁调度器的体系结构
  • 前言
  • 概述
  • 封锁调度器的原则
  • 插入锁动作的调度器结构
  • 锁表
  • 解锁处理
  • 等待的锁优先级
  • 总结
  • 结尾

前言

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

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

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

概述

前面分享了几种封锁的机制,那么使用这些模式之一的调度器如何工作呢,本文将分享封锁调度器的一种体系结构。

封锁调度器的原则

  • 事务本身不会申请封锁,或者不能依赖于事务做这件事。 而是在读,写以及其它访问数据的动作中插入锁的动作,这是调度器的任务;
  • 事务不释放锁,而是调度器在事务管理器告诉它事务提交或者中止时释放锁;

这样调度器就可以独立进行工作,进行调度决策。

插入锁动作的调度器结构

基于封锁的调度器,由两部分构成,它的输入来自由事务的读,写,提交,中止等请求,调度器还维护一个锁表。
在这里插入图片描述

事务请求的动作,通常通过调度器传送并在数据库上执行,但是在某些情况下,事务等待一些锁而被推迟。
调度器的两部分分别执行以下动作:

  • 第一部分接受事务产生的请求流,并在所有数据库访问操作如读,写,增量,更新等前面插入对应的锁动作。不管调度器使用的是什么样的封锁模式,调度器的第一部分都将从中选择适当的封锁方式;

  • 第二部分接收第一部分传来的封锁和数据库元素访问动作序列,并正确的执行它们中的每一个。如果接收到一个封锁或数据库访问请求,那么它要决定提出请求的事务T是否由于某个锁不能被获得,因而需要被推迟。
    如果是的话,这个动作将被推迟,并被加入到一个最终必须为事务T执行的动作列表中,直到条件允许时再执行;
    如果不是,那么就不会推迟,前面所申请的锁已经被授予,动作将送到数据库上执行。

  • 当事务T提交或中止时,事务管理器通知第一部分,第一部分将释放T持有的所有的锁;同时,如果有事务正在等待这些锁,第一部分将通知第二部分,执行那些被推迟的动作;

  • 当第二部分被告知某个数据库元素上的锁可以获得时,它决定接下来能获取锁的一个或多个事务,并尽可能多的执行这些事务被推迟的动作,直到它们完成或到达另一个不能被授予的锁。

锁表

锁表是将数据库元素与有关该元素的封锁信息联系起来的一个表。这个表可以用一个hash表来这现,使用数据库元素地址作为散列码。
没有被封锁的元素不会出现在锁表中,所以它的大小与被封锁的元素数目成正比,而不是整个数据库的大小。

锁表通常不是占用查询执行和日志的缓冲区,而是数据库的组成部分,它由操作系统为它分配空间。

锁表的每一项,由以下主要信息构成:

  • 组模式,概括事务申请数据库元素A上的一个新锁时,所面临的最苛刻条件。当收到封锁请求时,并不是将它与其它事务持有的锁一个个比较,而是可以通过只比较请求与组模式,来简化授予,拒绝的决策。
    比如
    a) S表示被持有共享锁,那么只有共享锁的请求可以被授予;
    b) U表示当前元素有一个更新锁,而且可能有一个或多个共享锁;
    c) X表示有一个排它锁已经有事务持有,此时肯定没有其它锁;

  • 等待位;表示是否有事务在等待;如果为真时,至少有一个事务在等待,等待列表不为空;

  • 一个列表,描述所有在数据库元素A上当前持有锁,或者等待A上的锁的那些事务。

解锁处理

上面锁表描述中体现了加锁的过程,那么解锁如何处理呢?

假设事务T解锁A,那么有以下几种情况:

  • 如果T持有的锁与组模式不同,比如持有S锁,而组模式为U,则不需要改变组模式;
  • 如果与组模式相同,那么就不得不检查整个列表,找到新的组模式;
    新的组模式只能是S,因为只有一个更新锁或者排它锁。

然后再处理等待的事务,对它们申请的锁存在一个优先级策略。

等待的锁优先级

当需要授予的申请锁列表中有一个或多个锁时,有几种不同的方法,它们各有优点:

  • 先来先服务;同意等待时间最长的封锁请求;这种策略保证不会饿死,即一个事务永远在等待锁。

  • 共享锁优先;首先授予所有等待的共享锁。如果有等待的更新锁,则授予一个更新锁;只有没有其它锁等待时,才授予排它锁。这一策略在读多写少时,可以处理更多的事务,允许等待U或X的事务饿死;

  • 升级优先;如果有一个U锁的事务等待将其升到的X锁,则首先授予该锁。否则,采取前面两种之一的策略。

总结

基于封锁的调度器,不依赖于事务来加解锁,通过锁表的记录来决策调度事务序列的执行。

结尾

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

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

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

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

相关文章

分享一个国内可用的免费AI-GPT网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 我们也忍不住做了一个基于ChatGPT的网站,可以免登陆!!国内可直接对话AI,也有各种提供工作效率的工具供大家使用。 可以这…

Spring Cloud Alibaba简介

1、简介 Spring Cloud阿里(https://sca.aliyun.com/en-us/)为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。 有了Spring Cloud阿里,你只需要添加一些注释和少量的配置&#…

Java集合(已重写-废弃了)

# 精辟总结 其实各种八股文资料,他也就是围绕着核心知识展开提问的,你只要根据八股文把核心知识提炼出来,形成核心知识体系! Java集合那是重点中的重点。最基本的概念要懂,核心的概念,那要滚瓜烂熟。 Ja…

【计算机视觉】基于OpenCV计算机视觉的摄像头测距技术设计与实现

基于计算机视觉的摄像头测距技术 文章目录 基于计算机视觉的摄像头测距技术导读引入技术实现原理技术实现细节Python-opencv实现方案获取目标轮廓步骤 1:图像处理步骤 2:找到轮廓步骤完整代码 计算图像距离前置技术背景与原理步骤 1:定义距离…

[传智杯 #3 决赛] 面试

题目背景 disangan233 和 disangan333 去面试了,面试官给了一个问题,热心的你能帮帮他们吗? 题目描述 现在有 n 个服务器,服务器 i 最多能处理 ai​ 大小的数据。 接下来会有 k 条指令 bk​,指令 i 表示发送 bi​ …

海德汉(HEIDENHAIN)CNC数据采集(可免授权)

一,概述 海德汉 常见的系统一般有530、640系统,采集一般有两种方法: (1)购买海德汉官方的SDK,HeidenhainDNC COM Component,安装之后有相应的demo,支持的语言有C#、C/C。此方法还需…

面试篇之微服务(二)

目录 服务容灾 21.什么是服务雪崩? 22.什么是服务熔断?什么是服务降级? 什么是服务熔断? 什么是服务降级? 有哪些熔断降级方案实现? 23.Hystrix怎么实现服务容错? 24.Sentinel怎么实现限…

JSP格式化标签 parseDate将指定时间格式字符串转为真正的date对象

格式化标签最后一个就是 parseDate 作用 将一个日期/时间格式字符串 转为 真正的date时间类型 有点无语 这种 东西应该都是在java中去做的 而不是在java中 这个建议也是做个了解即可 作用不是那么大 基本语法如下 这里 我们 直接编写代码如下 <% page contentType"…

JSP格式化标签 parseNumber指定格式字符串转数字类型

好 我们继续来说格式化标签 parseNumber 它的作用是讲一个字符串 转换为指定格式的数值型 老实说 这东西 作为了解把 实际开发中都不是用得少 我建议还是在java端就处理好 不建议在jsp中高这种类型转换的操作 基本格式如下 这几个属性都是我们这几期jsp标签的老朋友了 我们…

【STM32】STM32学习笔记-新建工程(04)

00. 目录 文章目录 00. 目录01. 创建STM32工程02. STM32工程编译和下载03. LED测试04. 型号分类及缩写05. 工程结构06. 附录 01. 创建STM32工程 【STM32】STM32F103C8T6 创建工程模版详解(固件库) 02. STM32工程编译和下载 2.1 选择下载器位ST-Link Debugger 2.2 勾选上电…

认识成交量VOL,搞懂量价关系

一、认识成交量VOL 1、成交量VOL的含义 VOL是一个成交量指标&#xff0c;是指个股或者大盘一定时间内的成交数量&#xff0c;一般的炒股软件中都是指成交总手数&#xff08;1手100股&#xff09;。 成交量体现在炒股软件上就是一根竖着的柱子&#xff0c;成交量越大&#xff0c…

Redis常见类型

常用类型String字符串类型Hash字典类型List列表类型Set集合类型ZSet有序集合类型 Java程序操作Redis代码操作Redis 常用类型 String字符串类型 使用方式&#xff1a; 使用场景&#xff1a; Hash字典类型 字典类型(Hash) 又被成为散列类型或者是哈希表类型&#xff0c;它…

数据库-MySQL之数据库必知必会22-26章

第 22 章 使用视图 视图是虚拟的表。与包含数据的表不一样&#xff0c;视图只包含使用时动态检索数据的查询。 使用视图 视图用CREATE VIEW语句来创建。 使用SHOW CREATE VIEW viewname&#xff1b;来查看创建视图的语句。 用DROP删除视图&#xff0c;其语法为DROP VIEW view…

开发猿的平平淡淡周末---2023/12/3

2023/12/3 天气晴 温度适宜 AM 早安八点多的世界&#xff0c;起来舒展了下腰&#xff0c;阳光依旧明媚&#xff0c;给平淡的生活带来了一丝暖意 日常操作&#xff0c;喂鸡&#xff0c;时政&#xff0c;洗漱&#xff0c;恰饭&#xff0c;肝会儿游戏 看会儿手机 ___看累…

数据结构 | 查漏补缺之ASL、

目录 ASL 情形之一&#xff1a;二分查找 线索二叉树 哈夫曼树 大根堆 邻接表&邻接矩阵 ASL 参考博文 关于ASL(平均查找长度)的简单总结_平均查找长度asl-CSDN博客 情形之一&#xff1a;二分查找 线索二叉树 参考博文 线索二叉树(线索链表遍历&#xff0c;二叉树…

Unity中Shader指令优化

文章目录 前言解析一下不同运算、条件、函数所需的指令数1、常数基本运算2、变量基本运算3、条件语句、循环 和 函数 前言 上一篇文章中&#xff0c;我们解析了Shader解析后的代码。我们在这篇文章中来看怎么实现Shader指令优化 Unity中Shader指令优化&#xff08;编译后指令…

【深度学习实验】图像处理(四):PIL——自定义图像数据增强操作(图像合成;图像融合(高斯掩码))

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. PIL基础操作2~4. 随机遮挡、随机擦除、线性混合5. 图像合成5.1 原理5.2 实现5.3 效果展示 6. 图像融合6.1 原理6.2 实现6.3 效果展示 一、实验介绍 在深度学习任务中&#xff0c…

MySQL进阶_EXPLAIN重点字段解析

文章目录 第一节.准备1.1 版本信息1.2 准备 第二节.type2.1 system2.2 const2.3 eq_ref2.4 ref2.5 ref_or_null2.6 index_merge2.7 unique_subquery2.8 range2.9 index2.10 all 第三节. Extra3.1 No tables used3.2 No tables used3.3 Using where3.4 No matching min/max row3…

【数据结构高阶】AVL树

上期博客我们讲解了set/multiset/map/multimap的使用&#xff0c;下面我们来深入到底层&#xff0c;讲解其内部结构&#xff1a; 目录 一、AVL树的概念 二、AVL树的实现 2.1 节点的定义 2.2 数据的插入 2.2.1 平衡因子的调整 2.2.1.1 调整平衡因子的规律 2.2.2 子树的旋…

JavaEE 多线程

JavaEE 多线程 文章目录 JavaEE 多线程引子多线程1. 特性2. Thread类2.1 概念2.2 Thread的常见构造方法2.3 Thread的几个常见属性2.4 启动一个线程2.5 中断一个线程2.6 等待一个线程2.7 获取当前线程引用2.8 休眠当前线程 3. 线程状态 引子 当进入多线程这一块内容时&#xff…