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

02-1_MVCC版本链清理

MVCC-版本链清理

文章目录

    • MVCC-版本链清理
        • 简介
        • 依赖机制
        • Purge 操作的触发时机
        • 版本链清理的详细过程
        • 示例操作流程
        • 延迟清理
        • 配置和监控
        • 总结

简介

MySQL 中的 MVCC 机制通过版本链来管理数据的多版本存储,以支持高并发的读写操作。然而,随着事务的进行,旧版本的数据会不断累积,导致存储空间的浪费。为了避免这种情况,InnoDB 存储引擎实现了自动清理机制来管理和清理不再需要的旧版本数据。


依赖机制

版本链清理这个过程主要依赖于以下几个机制:

  1. 回滚段(Undo Log)和回滚段的清理
    • InnoDB 在进行数据修改时,会将旧版本的数据保存在回滚段中,以支持 MVCC 和事务回滚。回滚段的数据在事务提交后并不会立即删除,因为其他事务可能仍然需要访问这些旧版本数据。
    • 当所有引用某个回滚段的事务都结束时,InnoDB 会标记这些回滚段中的数据为可清理。这些数据会在后台由专门的清理线程进行物理删除,从而释放存储空间。
  2. Purge 线程
    • InnoDB 有一个专门的后台线程,称为 Purge 线程。Purge 线程的任务是定期清理已经不再需要的旧版本数据。这些旧版本数据包括回滚段中的记录以及数据页中的版本链。
    • Purge 线程通过扫描回滚段中的数据来确定哪些旧版本已经不再被任何活跃事务引用。如果确定某个旧版本数据可以被清理,Purge 线程会将其从回滚段和数据页中删除。
  3. 一致性视图的影响
    • 一致性视图记录了当前所有活跃事务的事务ID(m_ids)。只有当旧版本数据的创建事务ID(DB_TRX_ID)小于 m_ids 中最小的事务ID 时,才认为该版本数据可以被清理。
    • 这意味着,如果有长时间运行的事务存在,它会延迟旧版本数据的清理,因为这些旧版本数据可能仍然对该长事务可见。

Purge 操作的触发时机

Purge操作是InnoDB定期执行的维护任务,由后台线程负责。它会在以下情况下被触发:

  • 当事务提交时,如果该事务产生了undo log记录,这些记录可能会被标记为可清理。
  • 定期检查点(checkpoint)时,系统会检查undo log的大小和系统配置,决定是否需要执行Purge。
  • 当undo log表空间达到其配置的限制时,会触发Purge来回收空间。

版本链清理的详细过程
  1. 标记可清理的旧版本
    • Purge操作会查看undo log记录,并确定哪些记录不再被任何活跃事务所需要。这通常是通过比较undo log记录的事务ID与当前系统中最早的活跃事务ID来完成的。如果undo log记录的事务ID小于最早的活跃事务ID,则可以安全地清理该记录。
  2. Purge 线程扫描回滚段
    • Purge 线程会定期扫描回滚段,找到那些已标记为可清理的旧版本数据。Purge 线程通过遍历回滚段中的 DB_TRX_ID 和一致性视图中的 m_ids 来确定哪些旧版本数据可以被安全地删除。(Purge操作会遍历版本链,从最老的undo log记录开始,向前追溯到更早的版本,直到找到一个仍然可能被需要的版本。)
  3. 物理删除旧版本数据
    • 一旦确定某个旧版本数据可以被清理,Purge 线程会将其从回滚段和数据页中物理删除。这包括更新版本链,确保版本链的完整性和正确性。
  4. 释放空间
    • 通过物理删除旧版本数据,Purge 线程释放了存储空间,减少了数据页和回滚段的存储压力。

示例操作流程

假设有以下表和数据:

CREATE TABLE example (id INT PRIMARY KEY,value VARCHAR(50)
);INSERT INTO example (id, value) VALUES (1, 'A'), (2, 'B'), (3, 'C');

现在进行一些数据操作:

-- 事务1:启动事务
START TRANSACTION;
SELECT * FROM example WHERE id = 1; -- 创建一致性视图-- 事务2:启动并更新数据
START TRANSACTION;
UPDATE example SET value = 'B' WHERE id = 1;
COMMIT;-- 事务3:启动并更新数据
START TRANSACTION;
UPDATE example SET value = 'C' WHERE id = 1;
COMMIT;-- 事务1:快照读
SELECT * FROM example WHERE id = 1; -- 仍然读取旧版本数据 'A'
COMMIT;

在上述操作中,事务1 创建了一致性视图,记录了系统中活跃的事务ID。事务2 和事务3 进行数据更新,创建了新的数据版本,并将旧版本数据存储在回滚段中。

当事务1 提交后,InnoDB 会进行以下步骤:

  1. 标记旧版本数据
    • 事务2 创建的版本 value = 'B' 和事务3 创建的版本 value = 'C' 可能会被标记为可清理,具体取决于其他事务的状态。
  2. Purge 线程扫描
    • Purge 线程扫描回滚段,找到 DB_TRX_ID 小于所有活跃事务最小ID 的旧版本数据。
  3. 物理删除
    • 确定可清理的数据版本后,Purge 线程将其物理删除,更新版本链。
  4. 释放空间
    • 删除旧版本数据后,释放回滚段和数据页的存储空间。

延迟清理

InnoDB的Purge操作是延迟执行的,它不会立即在事务提交后清理undo log记录,这是因为可能有其他事务仍然需要这些记录来构建它们的Read View。Purge操作会等到所有可能需要旧版本的事务都已经结束后才执行清理。


配置和监控

在MySQL中,可以通过一些配置项来控制Purge操作的行为,例如:

  • innodb_purge_threads: 设置Purge操作使用的线程数。
  • innodb_purge_batch_size: 控制每次Purge操作清理的undo log记录数。

此外,还可以通过InnoDB的监控输出来检查Purge操作的状态,例如通过SHOW ENGINE INNODB STATUS命令。


总结

MySQL 中的 MVCC 机制通过版本链和回滚段来管理数据的多版本存储。在高并发环境中,Purge 线程的清理工作至关重要。它确保了存储空间的有效利用,同时维持了数据版本的正确性和一致性。通过定期清理旧版本数据,InnoDB 能够在支持高并发读写操作的同时,避免存储空间的浪费。

相关文章:

02-1_MVCC版本链清理

MVCC-版本链清理 文章目录 MVCC-版本链清理简介依赖机制Purge 操作的触发时机版本链清理的详细过程示例操作流程延迟清理配置和监控总结 简介 MySQL 中的 MVCC 机制通过版本链来管理数据的多版本存储,以支持高并发的读写操作。然而,随着事务的进行&…...

探索Python视频处理的瑞士军刀:ffmpeg-python库

文章目录 **探索Python视频处理的瑞士军刀:ffmpeg-python库**第一部分:背景介绍第二部分:ffmpeg-python库是什么?第三部分:如何安装ffmpeg-python库?第四部分:简单库函数使用方法1. 视频转码2. …...

进程间通信 - 通道

进程间通信 - 通道 什么是管道? 进程间的通信方式有五种,分别为:管道、信号量、共享内存、消息队列和套接字。 管道:本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于…...

华为数通HCIA系列第5次考试-【2024-46周-周一】

文章目录 1、子网掩码有什么作用,和IP地址是什么关系,利用子网掩码可以获取哪些信息?2、已知一个IP地址是192.168.1.1,子网掩码是255.255.255.0,求其网络地址3、已知某主机的IP地址是192.168.100.200,子网掩…...

【Linux】如何通过终端命令查看当前可用网络 WIFI + 设置已配置网络的连接优先级 + 连接/断连网络

【Linux】通过命令行,查看当前可用网络 WIFI 设置已配置网络的连接优先级 连接网络 列出所有可连接网络 nmcli device wifi list这个命令会列出所有可连接 wifi,*表示当前连接。 IN-USE BSSID SSID MODE CHAN …...

华为路由策略配置

一、AS_Path过滤 要求: AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接,引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…...

Debezium日常分享系列之:异步 Debezium 嵌入式引擎

Debezium日常分享系列之:异步 Debezium 嵌入式引擎 动机目标非目标保留Kafka Connect模型计划的更改线程池并行运行源任务存储偏移量并发处理CDC事件禁用CDC事件的完全排序自定义记录处理器并行处理记录的选项存储偏移量引擎状态和生命周期防止资源泄漏异常处理退出…...

leetcode206. Reverse Linked List

Given the head of a singly linked list, reverse the list, and return the reversed list. 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 思路一:双指针 class Solu…...

【MATLAB源码-第291期】基于matlab的AMI编码解码系统仿真,输出各个节点波形。

操作环境: MATLAB 2022a 1、算法描述 AMI(Alternate Mark Inversion,交替极性反转)是一种广泛使用的编码方法,尤其是在通信系统中,用于传输二进制数据。AMI编码的特点是在传输过程中,对于0信…...

springboot苍穹外卖实战:十一:复盘总结

近期在整理草稿区&#xff0c;故放出此贴。 server模块需要导入对common模块的依赖 <dependency><groupId>org.example</groupId><artifactId>sky-common</artifactId><version>1.0-SNAPSHOT</version></dependency>我现在有个…...

基于Python的药房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

chat2db数据库图形化工具

数据库图形化工具 DataGrip&#xff1a;由 JetBrains 公司开发&#xff0c;是开发者中广为人知的数据库管理工具&#xff0c;功能强大且支持多种数据库。DBeaver&#xff1a;一款开源的数据库管理工具&#xff0c;虽然相对 DataGrip 知名度稍低&#xff0c;但在开发者社区中也…...

弱口令整改方案:借助双因子认证加强账号密码安全

弱口令整改方案可借助宁盾 2FA双因子身份认证来解决。双因子认证&#xff08;也称双因素身份认证&#xff09;是一种安全认证机制&#xff0c;通过结合两个及以上不同的身份验证因子&#xff0c;提高企业用户在办公、研发、生产、运维场景下的的账号密码安全性。它可以有效防止…...

动态代理的优势是什么?

在数据采集的世界里&#xff0c;效率和稳定性是衡量代理IP服务优劣的关键指标。动态代理&#xff0c;作为一种高效的网络工具&#xff0c;正逐渐成为企业和开发者的首选。今天&#xff0c;我们就来聊聊动态代理的优势&#xff0c;以及它如何成为数据采集的高效之选。 动态代理…...

将大型语言模型(如GPT-4)微调用于文本续写任务

要将大型语言模型&#xff08;如GPT-4&#xff09;微调用于文本续写任务&#xff0c;构造高质量的训练数据至关重要。以下是如何构造训练数据的详细步骤&#xff1a; 1. 数据收集&#xff1a; 多样性&#xff1a; 收集多种类型的文本&#xff0c;包括小说、新闻、论文、博客等…...

引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException

完整报错如下&#xff1a; Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID junit-jupiter failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrc…...

深度学习:tensor的定义与维度

tensor的定义与维度 Tensor的定义与维度 Tensor是一个多维数组&#xff0c;用于在一般化的n维空间中表示数据和操作。在深度学习框架中&#xff0c;如TensorFlow或PyTorch&#xff0c;Tensor是基础数据结构&#xff0c;用来存储输入、输出、权重等信息。下面是Tensor不同维度…...

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api

前提&#xff1a; 从前面的学习我们知道 AVFrame中是最原始的 视频数据&#xff0c;这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据&#xff0c; 我们前面&#xff0c;将YUV数据或者 RGBA 数据装进入了 AVFrame里面&#xff0c;并且在SDL中显示。 也就是说&…...

算法——移除元素(leetcode27)

对于移除元素这道题来讲,我首先想到的还是双指针&#xff0c;根据题目要求我们需要在给定的一组数组中找出与目标值不同的元素数量并且将与目标值不同的元素全部移至数组左边右边则不需关注数组元素的大小&#xff0c;我们利用两个指针一个指向数组首部位置&#xff08;左指针&…...

『OpenCV-Python』安装以及图像的读取、显示、保存

点赞 + 关注 + 收藏 = 学会了 OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、机器学习和实时计算机视觉应用。比如图像和视频的滤镜和降噪、物体检测、人脸识别、证件号识别、车牌识别等应用。当然,也有其他工具可以对这些领域做支持,但本专栏是介绍 OpenCV 的,所…...

python开发桌面应用(跨平台) 全流程

前言 之前开发一些软件,亚马逊商品分析相关软件,但是基本上是通过程序猿控制台命令启动,同时在启动之前,还要进行程序依赖包,这对于非开发人员而言,简直是一种灾难, 为了让软件对于小白更加易用, 打算将其封装成应用程序(跨平台), 下面带大家一起完成python开发桌面应用的三步…...

el-table-column prop值根据数组获取

方法一&#xff1a; 可以给el-table-column添加一个属性&#xff1a;formatter&#xff0c;代码如下&#xff1a; 这里是因为多个列都需要同样的计算&#xff0c;所以使用column.property获取属性&#xff0c;不然可以直接row.属性 方法二&#xff1a; 直接在template scope …...

MySQL_聚合函数分组查询

上篇复习&#xff1a; 设计数据库时的三大范式1.第一范式&#xff0c;一行数据中每一列不可再分 关系型数据库必须要满足第一范式&#xff0c;设计表的时候&#xff0c;如果每一列都可以用SQL规定的数据类型描述&#xff0c;就天然满足第一范式. 2.第二范式&#xff0c;在第一…...

PPT 制作神器!Markdown 轻松变幻灯片!

做过幻灯片的朋友们都知道&#xff0c;PPT 的制作常常是费时费力的工作。尤其是需要不断调整布局和设计的时候。 而现在&#xff0c;GitHub 上有一款开源免费的 PPT 制作工具 moffee&#xff0c;能够极大地简化这一过程。你只需通过简单的 Markdown 编写内容&#xff0c;即可快…...

一七八、Node.js PM2使用介绍

PM2 是一个强大的生产级 Node.js 进程管理器&#xff0c;提供了自动重启、负载均衡和进程监控等功能。适用于开发和生产环境&#xff0c;简化了 Node.js 应用程序的管理和维护。 PM2 安装 1. 使用 npm 安装 PM2 npm i -g pm2latest-g&#xff1a;全局安装。latest&#xff1a…...

基于CSU18M92芯片的蓝牙体重秤方案

传统体重秤只有一个数据的显示功能&#xff0c;将需称重物体放置在体重秤上&#xff0c;体重秤显示当前物体的数据&#xff0c;物体移开&#xff0c;数据消失&#xff0c;体重秤没有数据记录、存储、分析功能。智能体重秤与传统体重秤相比&#xff0c;可通过低功耗蓝牙与手机AP…...

深度学习经典模型之VGGNet

1 VGGNet 1.1 模型介绍 ​ VGGNet是由牛津大学视觉几何小组&#xff08;Visual Geometry Group, VGG&#xff09;提出的一种深层卷积网络结构&#xff0c;他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军&#xff08;冠军由GoogLeNet以6.65%的错误率夺得&#xff09;和…...

Axure网络短剧APP端原型图,竖屏微剧视频模版40页

作品概况 页面数量&#xff1a;共 40 页 使用软件&#xff1a;Axure RP 9 及以上&#xff0c;非软件无源码 适用领域&#xff1a;短剧、微短剧、竖屏视频 作品特色 本作品为网络短剧APP的Axure原型设计图&#xff0c;定位属于免费短剧软件&#xff0c;类似红果短剧、河马剧场…...

ES + SkyWalking + Spring Boot:日志分析与服务监控(三)

目录 一、搭建SkyWalking 1.1 版本选择 1.2 下载安装 1.3 配置启动 1.4 SkyWalking UI介绍 二、Springboot项目使用 2.1 Agent下载 2.2 Agent配置skywalking oap地址 2.3 IDEA配置Agent地址 2.4 生成的ES索引介绍 三、在kibana上查看日志 四、问题和解决 3.1 日志…...

网站建设需求指引/电商平台的营销方式

当使用诸如[url]http://192.168.1.2/[/url]这样的本机地址访问web页面时&#xff0c;无法显示页面&#xff0c;但是使用localhost 127.0.0.1 或者本机的hostname时均可正常访问。这时通常可以检查如下几点&#xff1a;1、防火墙配置是否有问题2、IE的安全级别设置是否有问题3…...

做英文网站公司/网站开发框架

转载于:https://www.cnblogs.com/fanweisheng/p/11236228.html...

5分钟宣传片报价明细/sem和seo哪个工作好

一、布局管理器所属类包所属类包布局管理器名称说明Java.awtFlowLayout(流式布局)组件按照加入的先后顺序按照设置的对齐方式从左向右排列&#xff0c;一行排满到下一行开始继续排列BorderLayout(边界布局)容器划分为东、西、南、北、中五个区域&#xff0c;每个区域只能放置一…...

网站建设期任务及总结/优化培训学校

一、vi命令使用技巧补充 如何快速编辑文本内容yy --- 快速复制文件内容 3yy --- 复制三行内容 p --- 快速粘贴文本内容 3p --- 粘贴三行内容 dd --- 快速删除文件内容&#xff08;实质是剪切&#xff09; 3dd --- 删除三行内容 dG --- 删除光标当结尾所有内容 u&#xff08;und…...

wordpress文章如何置顶/内蒙古最新消息

在文本分类中&#xff0c;需要先对文本分词&#xff0c;原始的文本中可能由几十万个中文词条组成&#xff0c;维度非常高。另外&#xff0c;为了提高文本分类的准确性和效率&#xff0c;一般先剔除决策意义不大的词语&#xff0c;这就是特征词提取的目的。本文将简单介绍几种文…...

网站建设 做一个网站需要多少钱/最近热点新闻事件

1. 流程 Authentication&#xff08;认证&#xff09; 认证方式现共有8种&#xff0c;可以启用一种或多种认证方式&#xff0c;只要有一种认证方式通过&#xff0c;就不再进行其它方式的认证。通常启用X509 Client Certs和Service Accout Tokens两种认证方式。 Kubernetes集群…...