MySQL初阶——隔离级别之Read view

news2024/10/22 9:15:08

一、什么是快照?

当运行 select 查询语句时,才会触发快照,创建 read view 对象,把此时正在处理(未提交)的事务的 ID 都记下来,以便于后面查询时可以控制该读哪些事务的记录,不该读哪些事务的记录。

二、read view 的结构

class ReadView
{
private:
    m_ids; // 存处于快照区间内的事务 ID,即此时还在运行的事务 ID
    low_limit_id; // 此时系统还未分配的最小事务 ID,即目前已出现过的事务 ID 的最大值 + 1
    up_limit_id; // m_ids 中最小的事务 ID
    creator_tx_id; // 创建读视图的事务 ID
};

三、如何用 read view 来访问规定的文件?

由于事务和进程一样,都是并发(交替)执行的,因此早来的事务未必早提交,晚来的事务未必晚提交;晚来的事务早提交也是有可能的。 因此当遍历历史版本链时,所访问到的事务 ID 就分以下几种情况:

  • ID  < up_limit_id

此时就说明该事务是在 select 之前就已经提交了,可以访问。

  • up_limit_id <= ID < low_limit_id

因为此时是在历史版本链里访问到的事务 ID,因此该事务肯定是已经提交了的。但是事务 ID 在 low_limit_id 和 up_limit_id 之间,因此说明该事务是和 m_ids 里的事务一起进来的(即是在 select 时进来的),但是由于该事务在 select 之前就执行完了,因此就提交了。因此是可访问的。

举个例子:现在分别有 1,2,3,4 号事务,在 select 之前,4 号事务因为是短事务,就执行完了,因此 4 号事务就提交并加入到历史版本链里了。但此时 1,2,3 号事务都还没执行完,因此 read view 中的 m_ids 数组为:{1, 2, 3};low_limit_id 为:4 + 1 = 5;up_limit_id为:min(m_ids) = 1。因此 up_limit_id <= 4 < low_limit_id,而且因为 4 号事务在 select 前就提交了,因此 4 号事务是可访问的。所以,我们可以得出一个结论:如果处于 up_limit_id <= ID < low_limit_id 这一区间的 ID 是已提交状态,那么肯定是 select 之前就已经提交了。

或者,你也可以这样理解,4 号事务是跟 1,2,3 号事务一起开始运行的,但快照(select)的时候并不在 m_ids 数组里,那肯定是 4 号事务运行完提交了才不会在 m_ids 里的。

  • low_limit_id <= ID

因为此时是在历史版本链里访问到的事务 ID,因此该事务肯定是已经提交了的。但 up_limit_id <= ID,说明该事务是在 select 之后才进来的,因此也是 select 开始之后才提交的,因此是不可访问的。

四、如何通过 read view 实现隔离等级? (Read committed & Repeatable Read)

a. Read committed

每次 select 都会进行一次快照读。

b. Repeatable read

每次 select 只会采用最开始 select 那次的快照读。

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

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

相关文章

基于Multisim8路彩灯循环控制电路设计与仿真

1&#xff0e;彩灯能够自动循环点亮&#xff1b; 2&#xff0e;彩灯循环频率快慢可调&#xff1b; 3&#xff0e;彩灯具有8路输出。 4&#xff0e;自行设计脉冲信号产生电路。 链接&#xff1a;https://pan.baidu.com/s/1PhpVy58Y6-_uXnie8KYyzg 提取码&#xff1a;zjad

数学建模2:回归分析预测

回归模型是什么 回归分析预测模型是一种统计方法&#xff0c;用于研究变量之间的关系&#xff0c;并通过已知数据来预测一个变量的值。回归分析通常包括自变量和因变量&#xff0c;目标是建立一个回归模型来描述它们之间的关系。 简单来说回归模型就是找出一条直线或曲线来尽可…

若依框架的下载与配置

1. 若依版本 RuoYi-Vue前后端分离版。 2. 框架下载 2.1 后端框架下载 https://gitee.com/y_project/RuoYi-Vue 2.2 前端框架下载 https://github.com/yangzongzhuan/RuoYi-Vue3 3. 数据库配置 3.1 创建数据库 基于MySQL数据库&#xff0c;创建数据库&#xff1a;ry-vu…

【Eclipse系列】The word is not correctly spelled问题解决

问题描述&#xff1a;在eclipse编写代码时&#xff0c;偶尔会出现了The word is not correctly spelled的错误&#xff0c;但代码执行没有问题&#xff0c;查阅相关资料才发现是eclipse的拼写检查问题。 处理方法&#xff1a;在eclipse下的Window--Preference输入spelling&am…

【软件测试: jmeter工具】OS进程取样器调用python

在jmeter中有时候需要调用自定义函数进行加密、解密等拓展功能 本文通过识别验证码处理登录验证码为例&#xff0c;通过OS进程取样器&#xff0c;调用python函数实现 识别验证码的python函数源码 import base64 from io import BytesIO from PIL import Image import sys im…

nginx中的HTTP 负载均衡

HTTP 负载均衡&#xff1a;如何实现多台服务器的高效分发 为了让流量均匀分配到两台或多台 HTTP 服务器上&#xff0c;我们可以通过 NGINX 的 upstream 代码块实现负载均衡。 方法 在 NGINX 的 HTTP 模块内使用 upstream 代码块对 HTTP 服务器实施负载均衡&#xff1a; upstr…

OpenVLA-首个开源视觉语言动作大模型

官网&#xff1a;https://openvla.github.io/ 现在大模型已经卷到了机器人领域。 在视觉语言模型&#xff08;VLM&#xff09;的基础上&#xff0c; 加入机器人的动作&#xff08;Action) 这一模态&#xff0c; 视觉语言动作大模型&#xff08;VLA&#xff09;是目前大模型应用…

网络知识总结

osi七层模型 osi七层模型分为&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 应用层&#xff1a;客户端与服务端之间建立一个通话界面表示层&#xff1a;对数据进行语言转换&#xf…

Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读AMS通过startActivity启动Activity的整个流程的补充&#xff0c;更新了startActivity流程分析部分。 一般来说&#xff0c;有Activ…

基于Springboot在线视频网站的设计与实现

基于Springboot视频网站的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https://do…

15.JVM垃圾收集算法

一、垃圾收集算法 1.分代收集理论 分代收集理论是JAVA虚拟机进行垃圾回收的一种思想&#xff0c;根据对象存活周期的不同将内存分成不同的几个区域&#xff1b;一般将JAVA堆内存分为新生代和老年代&#xff1b;根据每个分代特点选择不同的垃圾收集器&#xff1b; 在新生代中&am…

UE4 材质学习笔记12(水体反射和折射)

一.水体反射和折射 首先就是要断开所有连接到根节点的线&#xff0c;因为水有很多不同的节点成分&#xff0c;当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射&#xff0c;虚幻中的大多数场景使用多种这些方法 它们会同时运作。…

开源vGPU方案 HAMi实现细粒度GPU切分——筑梦之路

前言 为什么需要 GPU 共享、切分等方案&#xff1f; 在使用GPU的过程中我们会发现&#xff0c;直接在裸机环境使用&#xff0c;都可以多个进程共享 GPU&#xff0c;怎么到 k8s 环境就不行了&#xff1f; 1. 资源感知 在 k8s 中资源是和节点绑定的&#xff0c;对于 GPU 资源…

【Linux】僵尸进程和孤儿进程

一、僵尸进程 何为僵尸进程&#xff1f; 在 Unix/Linux 系统中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;且两者的运行是相互独立的&#xff0c;父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff…

《编程入门与提高:开启数字世界的大门》

《编程入门与提高&#xff1a;开启数字世界的大门》 一、引言二、编程入门的基础知识&#xff08;一&#xff09;编程语言的选择&#xff08;二&#xff09;编程环境的搭建&#xff08;三&#xff09;编程的基本概念&#xff08;四&#xff09;编程的基本语法 三、编程入门的方…

哪些方法可以缓解面试紧张?

面试紧张是许多人在面对重要职业机会时的一种常见情绪。虽然一定程度的紧张可能激发人的潜能&#xff0c;但过度的紧张则可能影响到面试表现。为了缓解面试紧张&#xff0c;以下是一些有效的方法&#xff1a; 1.充分准备&#xff1a; 深入了解公司背景、职位要求以及公司文化…

地方门户分类信息网站源码系统 用户可以自由发帖 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 地方门户分类信息网站源码系统是一个基于PHP和MySQL开发的强大平台&#xff0c;旨在帮助用户轻松搭建地方性的分类信息网站。该系统集成了众多实用功能&#xff0c;支持用户自由发帖、浏览和搜索各类信息&#xff0c;如二手交易、求职招聘、房屋租售、生活服务、商家…

Python网络请求库requests的10个基本用法

大家好&#xff01;今天我们要聊聊Python中非常实用的一个库——requests。这个库让发送HTTP请求变得超级简单。无论你是想抓取网页数据还是测试API接口&#xff0c;requests都能派上大用场。下面我们就一起来看看如何使用requests完成一些常见的任务。 引言 随着互联网技术的…

空洞卷积:Atrous/Dilated convolution - 语义分割中多用到

没办法&#xff0c;我还是很多基础的、底层的模块不通透&#xff0c;读论文难免会受到阻碍&#xff0c;而且这现在科研任务很急了&#xff0c;必须要马上动手实验&#xff0c;全给我弄明白、特别是算法&#xff01; 空洞卷积-可变形卷积-这一个个我都要。 空洞卷积据说在语义分…

推动AI技术研发与应用,景联文科技提供专业高效图像采集服务

景联文科技提供专业图像采集服务&#xff0c;涵盖多个领域的应用需求。 包含人体图像、人脸图像、手指指纹、手势识别、交通道路、车辆监控等图像数据集&#xff0c;计算机视觉图像数据集超400TB&#xff0c;支持免费试采试标。 高质量人像采集服务&#xff1a;支持不同光线条件…