mysql组提交

Binlog Group Commit

1. 背景:没有组提交时的问题(MySQL 5.7及更早版本的痛点)

在早期版本的MySQL中,为了保证二进制日志(Binlog) 和 存储引擎(如InnoDB) 之间的一致性(即一个事务在Binlog和InnoDB中要么都提交,要么都不提交),MySQL使用了两阶段提交(2PC) 协议,并伴有一个严重的性能瓶颈。

简单流程如下:

  1. 准备阶段(Prepare Phase):存储引擎(InnoDB)将该事务的状态标记为“准备就绪”(已写入redo log,但未提交)。

  2. 写Binlog阶段:将事务的Event写入Binlog文件的缓存中。

  3. Sync Binlog阶段:调用 fsync() 系统调用,将Binlog缓存强制刷盘。这是最耗时的I/O操作

  4. 提交阶段(Commit Phase):存储引擎(InnoDB)将该事务正式提交。

这里的核心问题是: 为了保证事务在Binlog中的写入顺序与在InnoDB中的提交顺序严格一致(这对于复制和恢复至关重要),MySQL在步骤2和3期间必须持有 LOCK_log 和 LOCK_sync 这样的全局互斥锁(Mutex)

这意味着:

  • 每个事务在写Binlog和刷盘Binlog时,都必须串行化进行。

  • 即使有100个事务已经准备好了,它们也必须一个一个地排队,获取锁,执行耗时的 fsync() 操作,然后释放锁。

fsync() 是一个昂贵的磁盘I/O操作,让每个事务都单独执行一次 fsync(),相当于把数据库的最高吞吐量限制在了磁盘的IOPS(每秒输入输出次数)上,这在高并发的写场景下是灾难性的,CPU会空转等待I/O,性能急剧下降。

2. Binlog Group Commit(组提交)的核心思想

组提交的精髓可以概括为:一次获取,一组处理

它将一个高频率的、单个的 fsync() 操作,打包成一个低频率的、批量的 fsync() 操作。用一次I/O操作的代价,完成多个事务的持久化,极大地提升了效率。

3. 组提交的工作流程(三个阶段)

组提交将提交过程分解为三个顺序的阶段,每个阶段都有一个队列。当一个线程进入流程时,它首先尝试成为当前阶段的领导者(Leader),如果不是领导者,它就加入队列等待。领导者负责代表整个队列执行该阶段的操作。

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

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

相关文章

C#简单组态软件开发

C#简单组态软件开发 组态软件(SCADA/HMI)是工业自动化领域的核心软件,用于监控和控制工业过程。 系统架构设计 一个基本的组态软件应包含以下模块: 图形界面编辑器设备通信模块实时数据库运行时引擎报警系统历史数据存储 开发环境搭建开发工具&#xff1…

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

目录 壹 创建骨骼 1 准备一个模型 2 创建骨骼 腿部骨骼 躯体骨骼 嘴巴骨骼 披风骨骼 手臂骨骼 手指骨骼 3 给骨骼命名 4 调整关节的坐标轴 测试 5 镜像骨骼 贰 控制器 一 脚部控制 IK 1 脚部IK创建 腿部IK 脚掌IK 2 脚部IK打组 动作1:脚掌着地&…

手写MyBatis第46弹:多插件责任链模式的实现原理与执行顺序奥秘--MyBatis插件架构深度解析

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论🔥🔥&am…

宜春城区光纤铺设及接口实地调研

一、研究方向与近期关注 因为课题研究的原因,最近对城市骨干网非常感兴趣。前期我讨论了5G,WiFi及自组网等无线通信网络情况,感兴趣的朋友可以移步我的博客阅读: 5G无线通信网络场景(日常、工业)及拓扑结…

Tomcat 企业级运维实战系列(六):综合项目实战:Java 前后端分离架构部署

Tomcat 企业级运维实战系列(六):综合项目实战:Java 前后端分离架构部署一:概述二:部署1)环境准备2)部署数据库3)部署后端4)部署前端总结🚀 Tomcat…

《Unity Shader入门精要》学习笔记四(高级纹理)

1、立方体纹理解释:站在一个完全透明的玻璃盒子中心,就可以看到6个面。把这个玻璃盒子的6个面都贴上一张照片。这6张照片合起来,就记录了周围360度的环境,比如蓝天、地面、建筑、树木等。在2D纹理中,使用坐标来找颜色&…

局域网中使用Nginx部署https前端和后端

目录 一.前端部署https 二.后端部署https 一.前端部署https 1.前端正常创建项目即可,打包后,文件夹的格式是dist 2.下载认证的证书 也可以使用其他软件,这里推荐使用mkcert,下载地址如下: Releases FiloSottile/mkcert GitHub 3.输入 mkcert -install

K8s卷机制:数据持久化与共享

在 Kubernetes(K8s)中,卷(Volume) 是用于解决容器内数据持久化、容器间数据共享以及与外部存储交互的核心机制。它本质上是一个可供 Pod 中容器访问的存储目录,生命周期独立于容器(容器重启或销…

线性回归原理推导与应用(十一):多重共线性

多重共线性的定义与影响 多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。 根据定义和影响程度,可以将多重共线性分为极端共线性和一般共线性。极端共线…

day082-初识ElasticStack

文章目录0. 老男孩思想-人性十大需求1. ElasticStack介绍1.1 ELK(**Elastic Stack**)1.2 logstash和filebeat的区别2. ElasticSearch单点部署2.1 下载ElasticSearch软件包2.2 安装软件并修改配置文件2.3 启动并测试服务3. ElasticSearch集群部署3.1 安装…

软考 系统架构设计师系列知识点之杂项集萃(139)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(138) 第257题 系统工程利用计算机作为工具,对系统的结构、元素、()和反馈等进行分析,以达到最优()、最优设计、最优管理和最优控制的目的。霍尔(A.D.Hall)于1969年提出了系统方法的三维结构体系,通常称为霍…

solidity地址、智能合约、交易概念

目录地址address 的两种子类型(Solidity 0.5.0)address分类address 的常用操作和属性总结交易交易的基本结构(由外部发起)Gas交易生命周期函数调用与交易常见交易场景总结地址 在 Solidity 中,地址(addres…

jwt原理及Java中实现

一、JWT 是什么?解决什么问题? 我们先来一张图看一下这个过程:JWT(JSON Web Token)是一种把“认证信息(Claims) 完整性校验”打包成 自包含 的字符串的规范。 它主要用于无状态认证:…

大数据在UI前端的应用深化研究:用户行为数据的跨平台关联分析

大数据在UI前端的应用深化研究:用户行为数据的跨平台关联分析每天,你在手机 App 里点了一个按钮、在网页上滑了两屏、又在小程序里停留了 3 秒,这些看似零散的动作,其实都在被悄悄记录。过去,这些数据只能各自躺在自己…

C++11基础——— 右值引用和移动语义

1. C11的发展历史 C11是C的第⼆个主要版本,并且是从C98起的最重要更新。它引入了大量更改,标准化了既有实践,并改进了对C程序员可用的抽象。在它最终由ISO在2011年8月12日采纳前,人们曾使用名称“C0x”,因为它曾被期待…

【一】Django框架版本介绍

【一】Django框架版本介绍 【一】Django框架版本 ● Django 是一个高级的Python Web框架,由荷兰人Armin Ronacher创建。 ● 随着版本的迭代和功能的不断优化,Django在处理异步请求方面也有了显著的进步。 【1】Django1.x ● 默认不支持异步 ● Django 1.…

git 大文件上传不了的 问题

你 还是在 cmd 里执行,Select-String 是 PowerShell 的命令,cmd 不认识。 请务必按下面的步骤 切换到 PowerShell 再运行。✅ 1. 打开 PowerShell(不要再用 cmd)最简单: 在资源管理器里进入 D:\linShiWenjian\my-react…

【FIX】go运行报错“missing go.sum entry for module providing package”解决方案

🔧 ​核心解决方案​**运行 go mod tidy**​ ​作用​:自动同步 go.mod和 go.sum文件,添加缺失依赖并移除无用条目。 go mod tidy​适用场景​:90% 的校验和缺失问题可通过此命令解决。 ​注意​:若项目含私有仓库&…

【实操教学】ArcGIS 如何进行定义坐标系

一、坐标系定义的方式创建数据时可直接完成坐标系定义;针对已创建的数据集(涵盖要素类、要素数据集及栅格数据集),则可通过以下这种方式定义:工具箱工具调用:使用 ArcGIS 工具箱中的 “定义投影&#xff08…

如何使用Windows自带的PnPUtil命令来禁用/停用和启用硬件设备

我来详细讲解一下如何使用 Windows 自带的 PnPUtil 命令来禁用(停用) 和启用硬件设备。 PnPUtil (即插即用实用工具) 是一个功能强大的命令行工具,主要用于安装、卸载、枚举和修改驱动程序包。对于硬件的启用和禁用,它通过操作设…