数据库并发控制技术

1.数据库中为什么要采用并发控制?并发控制技术能保证事务的哪些特性?

因为多个事务的并发操作会对数据库产生影响,当多个事务同时访问一个数据时就会互相干扰。并发控制技术能保证事务的一致性,隔离性。一致性是指事务要么全部运行完毕,要么进行回滚操作,拒绝执行。隔离性是指当一个事务正在访问一个数据段时,不允许其它事务访问此数据段。

2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?

1.丢失修改:举个例子就是有数据A,分别被事务1,事务2读入进行修改,事务1修改数据过后,提交修改。事务2修改数据后提交修改比事务1要晚,所以事务2的数据破坏了事务1的结果。

2.脏读:若有事务A修改某一个数据并将其写回磁盘,然后事务B读取了这个数据,但是在事务B读取此数据后,事务A发生错误然后回滚,这时事务B读取到的数据就是不正确的,所以说是脏事务。

3.不可重复读:举个例子:当事务A读取数据1后,事务B也读取了数据1并进行更改,此后事务A再次读取数据1发现读取的值和之前的值不一样。

4.幻读:当事务A读取某些数据记录后,事务B执行插入或删除操作,让事务A无法再现前一次读取结果。

3.事务的隔离级别都有哪些,事务隔离级别与数据一致性的关系是什么?

隔离级别有:读未提交,读已提交,可重复读,可串行化。

事务隔离级别与数据一致性关系:

根据表的内容再理解四个隔离级别:

读未提交:事务A在对数据进行处理时,事务B对数据进行读取。导致脏读就是B读取了一次A修改后的值,然后A回滚导致脏读。B读取了修改前的值,A作修改,B再次读取时发现两次的值不一样。当B先读取了一部分数据,A进行了增或删导致幻读。

读已提交:指一个事务可以读取其它事务已经提交的结果。

可重复读:指的是当一个事务再读取数据时,其它事务不能够对此数据进行UPDATE操作,所以脏读和不可重复读都被避免。但是此时仍然可以更新和删除。

可串行化:可以完全避免上述问题。

4.什么是封锁?基本的封锁类型有几种?说明它们的含义。

排它型锁:叫写锁(X锁)若事务T对数据A加上X锁后,则只允许事务T读取和修改A,其它事务不能再对A加任何锁。换句话说避免其它事务对A进行读取和修改。

共享型锁:叫读锁(S锁)若事务T对数据A加上X锁后,则只允许事务T读取A,其它事务可以对A再加读锁,但不能对A做任何修改。

5.如何用封锁机制保证数据的一致性?

先了解封锁协议的概念:何时申请锁,持续时间,何时释放,这些规则被称为封锁协议。

6.什么是活锁?说明活锁的产生原因和解决办法。

活锁:一个事务(进程)被永远地搁置,而无法访问数据资源,也就是说没有被系统调度到。

产生原因:有事务1,2,3,4,5然后事务1在加了锁给数据A,2也要对A加锁但是处于等待,当1释放锁后,正好3,4,5来加锁,让2一直被搁置。

解决办法:先来先服务策略。

7.什么是死锁?请给出预防死锁的若干办法。

发生死锁的必要条件:

1.资源互斥

2.不可抢占资源

3.在占有资源后还能够申请别人的资源。

4.形成环路。

预防死锁办法:

1.一次封锁法:将所有要使用的资源给全部加锁。缺点是:难以预料到全部加锁资源,扩大了加锁范围使得程序并发度降低。

2.顺序封锁法:就是说给资源编号然后按照编号的顺序去对资源加锁,实现破坏死锁产生必要条件中的环路等待条件。

8.举例检测死锁发生的一种方法。当发生死锁后如何解除死锁?

检测死锁并解除死锁方法是数据库中普遍采用的方法。检测死锁的方法有:

1.超时法:如果一个事务等待时间过长那么就判定产生了死锁,不过该方法容易产生误判。

2.有向图法:将所有节点抽象出来,加上有向边然后通过检查是否存在回路来判断是否发生死锁。

解除方法:

1.杀死环路中的一个事务。

2.用记录点记录下某个节点,然后回滚到这个记录点下的状态。

9.什么样的并发调度是正确的调度?

串行调度是正确的,执行结果等价于串行调度的调度也是正确的。这样的调度称之为可串行化调度。

解释概念:

可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。

正确调度:一个给定的并发调度,当且仅当它是可串行化的。

冲突操作:指的是不同事务对同一个数据进行读写或写写操作。

可串行化调度的充分条件:将一个调度保障冲突操作次序不变下,交换两个事务不冲突操作,然后若交换后的调度是一个可串行化调度,那么交换前的调度也是一个可串行化调度。

10.证明若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。

判断了怎么样是一个可串行调度后,还需要给出实现可串行化的方法:两段封锁协议来实现并发调度的可串行性。

两段锁:指的是所有事务必须分为两个阶段对数据项加锁和解锁。

11.举例说明对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。

如图是一个可串行化调度,但是却不符合两段锁协议。

通过10和11可以看出遵守两段锁协议是可串行化调度的充分条件,却不是必要条件。此外两段所协议并不是一次封锁协议。一次封锁协议遵守两段锁协议,但是两段锁协议却不完全需要一次性申请所有资源。所以说两段锁协议会引起死锁。

12.为什么要引进意向锁?意向锁的含义是什么?

回答为什么要引进意向锁,要先了解封锁粒度,多粒度封锁,显式封锁,隐式封锁概念。

封锁粒度:封锁的对象大小。

多粒度封锁:是指在一个系统内,事务可以针对不同的对象进行封锁,如对数据库,对元组,对关系。

多粒度树:

显示封锁:对多粒度树上的某一个节点直接加锁

隐式封锁:加锁的节点下的子节点是被隐式加锁了的。

引进意向锁的原因是:当为某个对象加锁,要先检查对象有没有显示封锁发生冲突,然后查看所有上级节点看看有无跟上级节点的隐式封锁冲突,还要检查所有夏季节点看他们的显式封锁是否与本事务的隐式封锁冲突。这样检查效率太低了,所以要引进意向锁。

意向锁的含义:如果对一个节点加意向锁,说明该节点的后裔节点正在被加锁;对任一节点加锁时,必须先对它的上层节点加意向锁。

13.说明常用的意向锁(IS,IX,SIX),给出这些锁的相容矩阵。

IS:意向共享型锁,如果对一个数据对象加IS锁,表示它的后裔节点想要加S锁。

IX:意向排他型锁:如果对一个数据对象加IX锁,表示它的后裔节点想要加X锁。

SIX:共享意向排他型锁:表示先加S锁再加IX锁。对某个表加SIX锁,则表示该事务要读真个表,同时会更新个别元组。

封锁类型相容矩阵:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM服务器虚拟化手机,云手机推流应用案例

大家都知道,ARM 服务器虚拟化手机和云手机推流技术可算是热门话题,不止是企业,个人卖家也会通过云手机推流来获得更多的客源,实现经济自由,但是针对云手机的推流,很多人还是不知道有哪些应用场景~我们可以展…

三十分钟学会RabbitMQ

1、初识MQ 1.1 MQ是什么? MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中…

SpringCloud Alibaba Sentinel基础入门与安装

GitHub地址:https://github.com/alibaba/Sentinel 中文文档:https://sentinelguard.io/zh-cn/docs/introduction.html 下载地址:https://github.com/alibaba/Sentinel/releases Spring Cloud Alibaba 官方说明文档:Spring Clou…

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中,需要在angular.json添加favicon.ico额外的构建 前言 有些项目…

大学物理绪论组收集和分析

目录 ​编辑 随机误差的估计 算术平均值的标准偏差 不确定度(Uncertainty)是测量学中的一个重要概念,用于表示测量结果的可靠程度。它反映了测量值可能偏离真值(即被测量的客观真实值)的程度。 A类不确定度的计算方…

Reverse-Proxy微软开源:高效构建HTTP反向代理的利器

Reverse-Proxy: 简化你的网络架构,用微软的反向代理加速你的服务。- 精选真开源,释放新价值。 概览 微软的reverse-proxy项目是一个高性能的HTTP反向代理应用程序开发工具包。它提供了一种灵活的方式来构建能够处理大量并发连接的代理服务。…

centos 7.8 安装sql server 2019

1.系统环境 centos 7.8 2.数据库安装文件准备 下载 SQL Server 2019 (15.x) Red Hat 存储库配置文件 sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo 采用yum源进行不安装下载,这时yum 会自动检测…

Javase.抽象类和接口

抽象类和接口 【本节目标】1.抽象类1.1抽象类的概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 2. 接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 接口使用实例2.8Clonable 接口和深拷贝2.9 抽象类和接口的区别 3. Object类…

《Windows API每日一练》5.1 键盘基础

本节我们讲述关于键盘的一些基础知识。当我们按下一个键盘按键时,会产生一个键盘按键消息。这一点你能确定吗?假如是一个菜单快捷键消息,或者是一个子窗口控件消息呢?这就超出了本节讨论的范围,我们将在菜单和子窗口控…

[Qt的学习日常]--窗口

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、窗口的分…

无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I

一、EasyX中的坐标系 不同于数理中的坐标系,EasyX中的y轴是竖直向下的 二、渲染缓冲区 之前的程序添加了这三个函数改善了绘图时闪烁的情况: 小球在"画布“上移动的过程就是我们在调用绘图函数,这个”画布“就是渲染缓冲区,先绘制的内…

【漏洞复现】致远OA webmail.do 任意文件下载 (CNVD-2020-62422)

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

摄影构图:人像摄影和风景摄影的一些建议

写在前面 博文内容涉及摄影中人像摄影和风景摄影的简单介绍《高品质摄影全流程解析》 读书笔记整理理解不足小伙伴帮忙指正 😃 生活加油 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样…

C++ | Leetcode C++题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …

前端技术栈三(vue+Axios)

一、Vue 1 基本介绍 1.1 Vue 是什么? Vue (读音 /vjuː/&#xff0c;类似于 view) 是一个前端框架, 易于构建用户界面 Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或项目整合 支持和其它类库结合使用 开发复杂的单页应用非常方便 Vue 是…

海外优青ppt美化_海优ppt录音视频制作

海外优青 优秀青年科学基金项目&#xff08;海外&#xff09;旨在吸引和鼓励在自然科学、工程技术等方面已取得较好成绩的海外优秀青年学者&#xff08;含非华裔外籍人才&#xff09;回国&#xff08;来华&#xff09;工作&#xff0c;自主选择研究方向开展创新性研究&#xf…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

centOS Stream9配置NAT8网络

首先将VMware关机&#xff0c;添加网络适配器 启动虚拟机&#xff0c;查看ens192是否打开连接 安装的图形化需要查看右上角电源处网卡是否连接 最小化安装一般不会出现未连接的状态 使用ip a 查看 配置网卡文件 cd /etc/NetworkManager/system-connections/cd到当前目录下…

【stm32-新建工程-HAL库版本】

stm32-新建工程-HAL库版本 ■ HAL库版本目录■ Drivers■ Middlewares 文件夹&#xff0c; 同寄存器版本一样。■ Output 文件夹&#xff0c; 同寄存器版本一样。■ Projects 文件夹&#xff0c; 同寄存器版本一样。■ User 文件夹 ■ HAL库版本目录 ■ Drivers ① &#xff0c…

leetcode119 杨辉三角②

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1] pub…