数据库-第十一章 并发控制【期末复习|考研复习】

前言

总结整理不易,希望大家点赞收藏。

给大家整理了一下数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。


数据库系统概论系列文章传送门:
第一章 绪论
第二/三章 关系数据库和标准语言SQL
第四/五章 数据库安全性和完整性
第六/七章 关系数据理论和数据库设计
第八/九章 数据库编程和优化
第十章 数据库恢复技术
第十一章 并发控制


文章目录

  • 前言
  • 第十一章 并发控制
    • 11.1 并发事务概述
    • 11.2 并发控制技术
    • 11.3 并发控制的可串行性
    • 11.4 两段锁协议
    • 11.5 多粒度封锁
    • 11.6 其他并发控制机制
    • 11.7 MVCC(背八股文的时候顺便加上了,我觉得这不会考)
      • 11.7.1 当前读和快照读
      • 11.7.2 隔离级别
      • 11.7.3 redolog和undolog
      • 11.7.4 MVCC实现原理
    • 11.8 数据库管理系统层次结构
    • 11.9 分布式数据库
  • 练手题
    • 12.1
    • 12.2
  • 总结


第十一章 并发控制

11.1 并发事务概述

并发控制机制:当多个用户并发存取数据库时就会产生多个事务同时存取同一数据的情况,可能会存取不正确的数据。为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。
事务是并发控制的基本单位。
并发控制带来的数据不一致性:丢失修改、不可重复读、读“脏”数据
(1)丢失修改:T1,T2同时读(这时读到的数据是一样的),T1对 其操作后,T2对其操作导致T1的操作丢失。
(2)不可重复读:(两个事务先后读取同一条记录,但两次读取的数据不同)①T1读后,T2修改数据,T1再读发现值不同
②T1读后,T2删除
③T1读后,T2插入(后两种有时也叫幻影现象)
(3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在
(4)读脏数据:(一个事务读到另一个事务还没提交的数据)T1操作后,T2读,T1由于某种原因撤销操作。导致T2读到的数据和数据库内容不一样。

11.2 并发控制技术

并发控制技术:封锁(locking),时间戳(timestamp),乐观控制法(optimistic scheduler),多版本并发控制(MVCC)。(ps:并发控制concurrency control)
(1) 封锁(大重点)
排他锁X锁(exclusive lock),写锁:事务T对对象A上写锁,T可对A进行读写,但其他事务都不能对A上任何类型的锁。直到T释放A为止。
共享锁S锁(share lock),读锁:事务T对对象A上读锁,则T可以读A,但不能写,其他事务只能对A上读锁不能加写锁,直到T释放A上的S锁为止。
(2)三级封锁协议(规定一些规则,避免并发操作出现问题)
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。(在写之前加X锁,防止丢失修改问题)
二级封锁协议:在一级基础上增加事务T在读R之前对其加S锁,读完之后释放S锁。(在读之前加S锁,读完就可以释放。防止丢失修改,脏数据问题)
三级封锁协议:在一级基础上增加事务T在读R之前对其加S锁,直到事务结束后才释放。(在读之前加S锁,事务结束才能释放。防止丢失修改,脏数据,不可重复读的问题)
(3) 活锁和死锁
活锁:某一事务永远处于等待状态。解决方法:先来先服务。
死锁:两个事务相互等待。
死锁预防:
(1)一次封锁法:要求每个事务必须一次对所有要使用的数据全部加锁。
(2)顺序封锁法:预先规定一个不会发生死锁的顺序,然后按照这个顺序严格加锁。
数据库解决死锁问题:诊断并解除死锁。
(1) 超时法
(2)等待图法。
通常采用的方法:选择一个处理代价最小的事务,将其撤销,释放此事务上所有的锁。使得其他事务能够继续运行下去。

11.3 并发控制的可串行性

可串行化调度:多个事务并发执行是正确的,当且仅当其结果与按某一次序结果相同。则称为是可串行化调度。
可串行性是并发事务正确调度的准则。
冲突操作是指不同事务对同一个数据的读写操作和写写操作。
一个操作在保证冲突操作次序不变的情况下,交换两个事务的不冲突操作次序得到另一个调度,如果此调度是串行的。则原调度是冲突可串行化的调度。冲突可串行化是可串行化的充分条件,不是必要条件。

11.4 两段锁协议

两段锁协议:所有事务必须分成两个阶段对数据加锁和解锁。
扩展阶段和收缩阶段:扩展阶段:只允许申请但是不能释放;收缩阶段:只能释放不能申请
是可串行化调度的充分条件,但可能会发生死锁。

11.5 多粒度封锁

显示搜索适应事物的要求直接加到数据对象上的资源。隐式封锁是该数据对象没有被独立加锁,是由其上级节点加锁而使该数据对象加上了锁。
意向锁的含义是如果一个节点加意向锁,则说明该节点的下层节点正在被加锁。
意向锁分为三种,意向共享锁IS锁(后裔加点拟加S锁),意向排他锁IX锁(后裔加点拟加X锁),共享意向排他锁SIX锁(先加S锁,后加IX锁,表示要读整张表并且更新个别元组)。

11.6 其他并发控制机制

时间戳方法给每个事务盖上一个时间戳,每个事务具有唯一的时间戳,并且按照这个时间戳来解决事务的冲突操作。
乐观控制法又被称为验证方法:认为事务中执行时很少发生冲突,让他自由执行,如果检查该事务发生冲突并影响可串行性则拒绝提交并回滚该事务。乐观锁用于读操作多的场景,悲观锁适用于写操作多的场景。
意向锁:如果一个结点加意向锁,则说明该节点的下层结点正在被加锁。
(节点的层次是数据库——>关系——>元组)
三种意向锁:意向共享锁(IS锁Intent share lock),意向排他锁(IX锁),共享意向排他锁(SIX锁)
IS: 事务要对数据对象加S锁,首先要对其上层加IS锁
IX:(上面那条换成X锁)
SIX锁:对一个数据对象加SIX锁,表示对他加S锁,再加IX锁。
意向锁中:任意事务要对一个数据对象加锁,必须先对他的上层结点加意向锁。

11.7 MVCC(背八股文的时候顺便加上了,我觉得这不会考)

MVCC多版本并发控制,指维护一个数据的多个版本使得读写操作没有冲突。快照读为mysql实现mvcc提供了一个非阻塞读功能。MVCC的具体实现依赖于数据库记录的三个隐藏字段、undo log日志、readview

11.7.1 当前读和快照读

当前读:读取的记录是最新版本读取时还要保证其他并发事务不能修改当前进入会对读取的记录进行加锁。
快照读简单的select就是快照读,快照读读取的版本是可见版本,也有可能是历史版本不加锁是非阻塞读。

11.7.2 隔离级别

在这里插入图片描述

不同的隔离级别会对于快照读有不同的处理方法。Read committed每一次select都会生成一个快照读,Repeatable read开启事务后第一个select语句才是快照读的,Serializable快照都会退化为当前读。

11.7.3 redolog和undolog

redo log重做日志记录的是事务提交时数据页的物理修改,有两部分构成重做日志缓冲和重做日志文件。输入每次提交时会将事务刷新到Redo log而不是直接将buffer pool中的数据刷到磁盘ibd文件中。redolog是顺序写,速度快,后台线程伺机采用一定机制再将数据刷新到ibd文件中。
undo log回滚日志用于记录数据被修改前的信息,属于逻辑日志 。

11.7.4 MVCC实现原理

三个隐藏字段:
DB_TRX_ID(最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID )、DB_ROLL_PTR(undolog版本链:回滚指针指向这条记录的上一个版本用于配合Undo log指向上一版本,不同事务或相同事务对同一条记录进行修改会导致该记录的Undo log形成1条记录版本链表 链表的头部是最新的旧记录 链表的尾部是最早的旧记录)、
DB_ROW_ID(隐藏主键如果表结构没有指定主键则生成该隐藏字段)。
由read view 来记录并维护系统当前活跃的未提交的事务的ID。readview中包含着当前活跃事务ID的集合、最小活跃事务ID、预分配事务ID 和readview创建者的事务ID。根据版本链数据访问规则来确定是否可以访问该版本。
在RC隔离级别下,在事务中每执行一次快照读生成readview,在RR隔离级别下在事务中第一次执行快照读时生成read view后续会重复使用。
MVCC靠隐藏字段Undo log版本链read view实现的。原子性由Undo log实现,持久性由Redo log实现一致性由Undo log和redo log实现,隔离性由锁和MVCC实现。

11.8 数据库管理系统层次结构

应用层——语言处理层——数据存取层——数据存储层
语言处理层:对数据库语言SQL进行语法分析、视图转换、完整性、安全性检查等,生成可执行代码(编译……)
数据存取层:处理元组,对元组实现增删改查这种操作
数据存储层:数据页和缓冲区,物理层面的管理

11.9 分布式数据库

分布式数据库是由一组数据组成,这组数据分布在计算机网络的不同计算机上,网络中的每个结点具有独立处理的能力,可以执行局部应用。同时,每个结点也能通过网络通信系统执行全局应用。(高度的自治性和整体性)

练手题

12.1

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

12.2

在这里插入图片描述
上一道题是10,这一道题是5,不同年份的练练手,套路都是一样的。

总结

数据库部分也更新完了,以往的章节有些可能和最初发布的版本不一样,新增加了许多题,大家都做做没什么坏处。
祝大家超常发挥!

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

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

相关文章

微信私信短剧机器人源码

本源码仅提供参考,有能力的继续开发 接口为api调用 云端同步 https://ys.110t.cn/api/ajax.php?actyingshilist 影视搜索 https://ys.110t.cn/api/ajax.php?actsearch&name剧名 每日更新 https://ys.110t.cn/api/ajax.php?actDaily 反馈接口 https://ys.11…

在线部署ubuntu20.04服务器,安装jdk、mysql、redis、nginx、minio、开机自启微服务jar包

一、服务器 1、查看服务器版本 查看服务器版本为20.04 lsb_release -a2、服务器信息 服务器初始账号密码 sxd / 123456 首先,更改自身密码都输入123456 sudo passwd 创建最高权限root账号,密码为 123456 su root 3、更新服务器源 1、更新源列表 sudo apt-g…

【零基础学习01】嵌入式linux驱动中pinctrl和gpio子系统实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面pinctrl和gpio子系统控制实验,操作硬件为I.MX6ULL开发板。 第一:pinctrl和gpio子系统简介 Linux系统是一个庞大又完善的系统,如果采用…

Day19:信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

目录 各类红蓝队优秀工具项目集合 自动化-武器库部署-F8x 自动化-网络空间-AsamF 自动化-企查信息-ENScan 自动化-综合架构-ARL&Nemo 思维导图 章节知识点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系统/端口服务/网络环境/防火墙等 应…

DataFunSummit 2023:洞察现代数据栈技术的创新与发展(附大会核心PPT下载)

随着数字化浪潮的推进,数据已成为企业竞争的核心要素。为了应对日益增长的数据挑战,现代数据栈技术日益受到业界的关注。DataFunSummit 2023年现代数据栈技术峰会正是在这样的背景下应运而生,汇聚了全球数据领域的精英,共同探讨现…

多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测

多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测 目录 多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 …

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆(线程共享) 3.3 本地方法栈(线程私有) 3.4 程序计数器(线程私有) 3.5 方法区(线程共享) 4.JVM 类加载 ① 类…

蓝桥杯大赛软件python赛道真题:蛇形填数

真题链接:https://www.lanqiao.cn/problems/594/learning/ 题目描述: 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 …

最简单的基于 FFmpeg 的内存读写的例子:内存转码器

最简单的基于 FFmpeg 的内存读写的例子:内存转码器 最简单的基于 FFmpeg 的内存读写的例子:内存转码器正文源程序结果工程文件下载参考链接 最简单的基于 FFmpeg 的内存读写的例子:内存转码器 参考雷霄骅博士的文章,链接&#xf…

【脚本玩漆黑的魅影】全自动丢球

文章目录 原理全部代码 原理 启动后截图。 丢球以后再截图。 如果两图一致,说明没成功,读档重来。 如果两图不一致,说明成功了。 while True:press(A)time.sleep(2)if is_same_img(ImageGrab.grab(), data_img):press(save2)else:break全部…

让Putty支持Tab页(多连接管理)

让Putty支持Tab页(多连接管理) 1 介绍2 PuTTY缺陷3 支持Tab页4 支持用户名和密码保存 1 介绍 PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。PuTTY为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权…

Redis特性与应用场景

Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中能够发挥重要作用。 Redis的特性 1.In-memory data structures: MySQL使用表的方式存储数据,这意味着数据通常存储在硬盘上,并且…