当前位置: 首页 > news >正文

mysql中的mvcc理解

是什么:MVCC指的是在读已提交、可重复读这两种隔离级别下的事务在执行普通的select操作时,访问记录的版本链的过程,可以使不同事务的读写操作并发执行,提高性能。

MVCC = 隐藏字段 + undo log 版本链 + ReadView
1.隐藏字段:对于聚簇索引来说,每条记录都有trx_id和roll_pointer两个隐藏列。
trx_id:修改该记录的事务的id
roll_pointer: 每次记录修改的时候,旧的版本会记录在undolog中,roll_pointer指向该记录旧的版本。

2.undo log 版本链: 一个记录的历史版本在undolog中,使用roll_pointer串成一个链
在这里插入图片描述

3.ReadView
undolog中有一条记录的多个版本,ReadView解决的问题是读的时候应该读取哪个版本的问题
ReadView包含4个比较重要的字段:
1)creator_trx_id ,创建这个 Read View 的事务 ID。select不会产生事务id,只有update,insert,delete才会产生。
2)m_ids ,表示在生成ReadView时当前系统中活跃的读写事务的 事务id列表
3)min_trx_id: 活跃的事务id中的最小值。
4)max_trx_id:分配给下一个事务的id值

review判断记录的某个版本是否可见的规则:
1)如果被访问版本的trx_id属性值与ReadView中的 creator_trx_id 值相同,意味着当前事务在访问它自己修改过的记录,所以该版本可以被当前事务访问。 (trx_id = creator_trx_id, 同一个事务,可以访问当前记录的版本)
2)如果被访问版本的trx_id属性值小于ReadView中的 min_trx_id 值,表明生成该版本的事务在当前事务生成ReadView前已经提交,所以该版本可以被当前事务访问。 (trx_id < min_trx_id,当前记录的事务id比活跃的事务的最小id还小,说明当前记录的事务已经提交,可以访问当前记录的版本)
3)如果被访问版本的trx_id属性值大于或等于ReadView中的 max_trx_id 值,表明生成该版本的事务在当前事务生成ReadView后才开启,所以该版本不可以被当前事务访问。 (trx_id >= max_trx_id,当前记录的事务在当前事务生成readview之后才开启,不可以访问当前记录的版本)
4)如果被访问版本的trx_id属性值在ReadView的 min_trx_idmax_trx_id 之间,那就需要判断一下trx_id属性值是不是在 m_ids 列表中。(min_trx_id < trx_id < max_trx_id)

  • 如果在,说明创建ReadView时生成该版本的事务还是活跃的,该版本不可以被访问。
  • 如果不在,说明创建ReadView时生成该版本的事务已经被提交,该版本可以被访问。

读已提交和可重复读隔离级别下,mvcc的区别:
读已提交,在每次查询开始时都会重新生成一个readview。(由于每次查询都会生成新的readview,即使有其它的事务修改了某个数据然后提交了,那么重新查询的时候也能看见修改,这就实现了读已提交,当然再次查询的时候,数据变了,这就是不可重复读)
可重复读,只会在第一次查询时生成一个readview,之后的查询不会重新生成。(由于只会在第一次查询的时候生成readview,即使有其它的事务修改了某个数据然后提交了,那么重新查询的时候还是原来的readview,根据readview规则判断,提交的数据对新的查询还是不可见的,所以实现了不可重复读)

可重复读存在幻读的问题。

快照读:不加锁,简单的select是快照读。使用mvcc实现。可能读到最新的数据,也有可能读到历史数据。
当前读:加锁实现,select或者增删改的时候加锁,都属于当前读。只能读到最新的数据。
当前读例子:

SELECT * FROM student LOCK IN SHARE MODE; # 共享锁
SELECT * FROM student FOR UPDATE; # 排他锁
INSERT INTO student values ... # 排他锁
DELETE FROM student WHERE ... # 排他锁
UPDATE student SET ... # 排他锁

相关文章:

mysql中的mvcc理解

是什么&#xff1a;MVCC指的是在读已提交、可重复读这两种隔离级别下的事务在执行普通的select操作时&#xff0c;访问记录的版本链的过程&#xff0c;可以使不同事务的读写操作并发执行&#xff0c;提高性能。 MVCC 隐藏字段 undo log 版本链 ReadView 1.隐藏字段&#xf…...

ETF申购赎回指南:详解注意事项与低费率券商推荐!

​ETF 申购&赎回 ETF申购赎回是个啥业务&#xff1f; 01 ETF申购、赎回是一种交易委托方式&#xff0c;指投资者通过申购方式(买入方向)获得ETF份额&#xff0c;通过赎回的方式&#xff08;卖出方向&#xff09;换掉/卖出ETF份额。ETF申购&#xff0c;通常是通过一篮子成…...

List<T>属性和方法使用

//author&#xff1a;shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …...

记一次:使用使用Dbeaver连接Clickhouse

前言&#xff1a;使用了navicat连接了clickhouse我感觉不太好用&#xff0c;就整理了一下dbeaver连接 0、使用Navicat连接clickhouse 测试连接 但是不能双击打开&#xff0c;可是使用命令页界面&#xff0c;右键命令页界面&#xff0c;然后可以用sql去测试 但是不太好用&#…...

Java面向对象编程进阶(四)

Java面向对象编程进阶&#xff08;四&#xff09; 一、equals()方法的使用二、toString()方法的使用三、复习 一、equals()方法的使用 适用性&#xff1a;任何引用数据都可以使用。 自定义的类在没有重写Object中equals()方法的情况下&#xff0c;调用的就是Object类中声明的…...

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0…...

如何通过自动化有效地简化 Active Directory 操作?

我们都知道规模稍微大一点的企业为了便于计算机的管理&#xff0c;基本都上了微软的AD域控制器。 那么肯定就会存在这么一个问题&#xff0c; 不断的会有计算机加入或者是退出域控制器&#xff0c;批量的创建、修改、删除AD域用户&#xff0c;如果企业的架构需要改变&#xff…...

Java-POI导出EXCEL(动态表头)

1、主要功能 导出excel&#xff0c;表头有固定的和动态的。动态表头之间不能穿插固定表头。 2、使用方法 引入下方两个工具类&#xff0c;定义excel固定表头类。调用方法即可。 调用方法&#xff1a; ExcelDynamicHeader<MajorNameChangeReport> ledgerSafetyProblemEx…...

利用 Direct3D 绘制几何体—9.流水线状态对象

到目前为止展示过编写输入布局描述、创建顶点着色器和像素着色器&#xff0c;以及配置光栅器状态组这 3 个步骤。接下来讲如何将这些对象绑定到图形流水线上&#xff0c;用以实际绘制图形。大多数控制图形流水线状态的对象被统称为流水线状态对象&#xff08;Pipeline State Ob…...

【开源项目】libfaketime安装、使用——小白教程

项目 Github&#xff1a;GitHub - wolfcw/libfaketime: libfaketime modifies the system time for a single application libfaketime安装 01.切换路径&#xff0c;目标路径&#xff1a;/usr/local &#xff08;在/usr/local路径下git clone 开源项目) 切换路径指令: cd …...

java.util.concurrent包

java.util.concurrent包是Java中用于并发编程的重要工具集&#xff0c;提供了丰富的并发原语和组件&#xff0c;以简化多线程编程的复杂性&#xff0c;并帮助开发者编写高效、可伸缩和线程安全的并发程序。其主要功能包括以下几个方面&#xff1a; 一、线程池和任务执行框架 …...

Django创建项目模块+创建映射类+视图

确保你的项目已经正确链接数据库 链接数据库的工具有很多,数据库的种类也有很多&#xff0c;我使用的数据库是mysql&#xff0c;工具是pmysql&#xff0c;使用pymysql链接数据库&#xff0c;在settings文件中这么设置&#xff1a; DATABASES {# default: {# ENGINE: dja…...

使用AMD GPU和LangChain构建问答聊天机器人

Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者&#xff1a;Phillip Dang 2024年3月11日 LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力&#xff0c;L…...

2024年808数据结构答案

1.已知带头结点单链表&#xff0c;H为头指针。设计一个算法&#xff0c;查找到链表的第m个结点(不包含头结点)&#xff0c;并将元 素值为X的结点插入到该结点后&#xff0c;形成一个新的链表。 // 定义单链表节点结构 typedef struct Node {int data;struct Node* next; } Nod…...

Amazon Linux 2023 安装 Docker

Amazon Linux 2023 安装 Docker 1. 简介 在公司需要将代码部属到 Amazon Linux 2023 系统上时&#xff0c;去 Docker 官方文档里面看也没有针对该系统的部属文档。虽然有通用的 Linux 部属方案但不能应用包管理工具。 首先执行yum、dnf、apt&#xff0c;执行yum和dnf都有正确…...

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求&#xff1a;批量注册5个用户&#xff0c;从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果...

GGD证明推导学习

GGD证明推导学习 这篇文章&#xff0c;建议先看相关的论文。这篇是我读证明的感悟&#xff0c;因此&#xff0c;不会论文的主体内容 首先&#xff0c;给出命题&#xff1a; DGI的sumary向量是一个常数 给定一个图&#xff1a; G { X ∈ R N D , A ∈ R N N } \mathcal{G…...

Flink难点和高频考点:Flink的反压产生原因、排查思路、优化措施和监控方法

目录 反压定义 反压影响 WebUI监控 Metrics指标 backPressureTimeMsPerSecond idleTimeMsPerSecond busyTimeMsPerSecond 反压可视化 资源优化 算子优化 数据倾斜优化 复杂算子优化 背压机制 反压预防 性能调优 内置工具 第三方工具 反压定义 在探讨Flink的性…...

Swarm - Agent 编排工具

文章目录 一、关于 Swarm&#xff08;实验性、教育性&#xff09;为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm&…...

使用Python中的jieba库进行简单情感分析

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;情感分析是一项重要的任务&#xff0c;它可以帮助我们理解文本背后的情感倾向。本文将通过一个简单的例子来介绍如何使用Python的jieba库对中文文本进行基本的情感分析。 1. 环境准备 首先&#xff0c;确保已经安装…...

【Prometheus】当 Prometheus 内存使用率过高时,应该从哪些方面入手进行排查和优化?

Prometheus 内存溢出深度排查指南:从 TSDB Head 到 Goroutine 泄露的全链路优化 用户问题原文:“当 Prometheus 内存使用率过高时,应该从哪些方面入手进行排查和优化?” 在支撑单集群500万+时间序列的生产环境中,Prometheus 的内存管理是 SRE 团队的核心挑战。一次未被及时…...

Rust微信SDK实战:构建高性能、类型安全的微信机器人

1. 项目概述与核心价值 最近在折腾一些需要与微信生态深度交互的自动化项目&#xff0c;比如自动回复、消息监控、群管理工具等。这类需求在电商客服、社群运营、企业内部流程自动化等场景下非常普遍。传统的做法往往是基于官方提供的HTTP API&#xff0c;自己封装请求、处理复…...

闲置烽火HG680L变身全能播放器:S905L-3B芯片刷机后安装EmuELEC游戏系统+CoreELEC影音库

闲置烽火HG680L改造指南&#xff1a;打造全能家庭娱乐终端 家里角落积灰的烽火HG680L机顶盒&#xff0c;其实是一块被低估的硬件宝藏。搭载Amlogic S905L-3B芯片的它&#xff0c;性能远超普通电视盒子。通过巧妙改造&#xff0c;不仅能流畅运行复古游戏系统&#xff0c;还能变身…...

OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程

OmenSuperHub终极指南&#xff1a;免费解锁惠普OMEN游戏本隐藏性能的完整教程 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普…...

基于梯度权值追踪的无监督域自适应优化研究

SummaryArticleObjectiveMethodComments基于梯度权值追踪的域自适应分类研究解决无监督领域自适应方法中存在的过拟合问题文章采用了基于梯度权值追踪的剪枝与优化算法来解决过拟合问题。该算法首先对样本进行训练&#xff0c;识别出重要的连接&#xff0c;并用权值的绝对值来量…...

分享!关于虚拟机性能优化实战的技术文(进击篇 学习资料自提取)

一、 综述与基础理论类文献 (帮助构建背景和原理部分大纲) 虚拟化技术综述&#xff1a; 查找标题包含“虚拟化技术综述”、“虚拟化原理与发展”等关键词的中文学术论文或书籍章节。这些文献通常会涵盖CPU虚拟化、内存虚拟化、I/O虚拟化等核心技术&#xff0c;为理解性能瓶颈和…...

5分钟免费激活Windows和Office:KMS_VL_ALL_AIO完整使用指南

5分钟免费激活Windows和Office&#xff1a;KMS_VL_ALL_AIO完整使用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统未激活的烦恼而困扰吗&#xff1f;想要免费使用完整功能…...

别再写for循环了!用Java8的groupingBy,一行代码搞定员工按城市分组统计

告别繁琐循环&#xff1a;Java8 groupingBy在数据分组统计中的革命性应用 每次面对从数据库查询出的员工列表&#xff0c;需要按城市、部门或职级进行分组统计时&#xff0c;你是否还在写着重复的for循环&#xff1f;那些嵌套的if判断、临时变量和累加操作不仅让代码臃肿不堪&a…...

观察Taotoken在多模型并发请求下的稳定性与响应表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在多模型并发请求下的稳定性与响应表现 在实际业务开发中&#xff0c;我们常常需要同时调用多个不同的大模型来处理不…...

3个步骤让AMD显卡也能运行CUDA程序:ZLUDA终极指南

3个步骤让AMD显卡也能运行CUDA程序&#xff1a;ZLUDA终极指南 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 你是否曾经因为手头只有AMD显卡&#xff0c;却想运行那些需要CUDA加速的深度学习框架而感到无奈&…...