MySQL源码学习:InnoDB关于group commit的简单QA

    前天同事问了个问题,今天又再翻了下group commit。关于这个话题Kristian Nielsen有一个很详尽的系列文章(http://kristiannielsen.livejournal.com/12254.html), 有四个页面,文中有链接。这里列出一些细节,主要是对上面文章补充一下。

 

       Q:什么是group commit。

       A:1) 简单说就是:好几个线程写文件,然后一个线程fsync;

             2) 只有事务日志(ib_logfile)用到;

            3) 注意是多个线程(多用户)。一个线程在一个事务过程中若出现多次写事务日志,是不能一起提交的。

 

       Q: 既然是多个线程,那怎么决定由哪个线程去”commit”

       A:其实每个线程都会试着去fsync。成功fsync之后线程会修改log_sys->written_to_all_lsn。 另外一个线程在fsync之前若判断log_sys->written_to_all_lsn大于自己的lsn,说明自己要作的事儿已经被别的线程做掉了,直接返回(group commit获益)。

 

       Q:group commit怎么保证事务日志顺序和bin-log顺序一致。

       A:这个问题是在Kristian Nielsen那篇文章中纠结最多的。目前的做法,是在写binlog前的prepare阶段加了个锁,这个锁直到binlog写完,然后将新的binlog位置填到trx->mysql_log_offset才解开。因此两个日志上的事务顺序是保证一致的。

 

       在这个机制下,binlog是无法实现group commit的,所以直到最新的5.6版本中的log_xid函数的注释中依旧写着”todo: group commit”。

  (补充说明:Percona 5.5.18版本以后已经有binlog group commit的功能)

Git 部署 Moodle:生产级 LMS 的版本控制与运维实践 Moodle 作为主流开源学习管理系统(LMS),其部署方式直接影响平台的可维护性、安全性和高可用性。传统 ZIP 包安装虽简单,但缺乏版本追溯、增量升级和多环境协同能力;而基于 git 的部署方案,本质上是将 LMS 视为基础设施代码(Infrastructure as Code),依托分支管理、tag 锚点和 submodule 机制,实现语义化版本控制、原子化升级回滚与配置隔离。结合 Postgres 的强事务支持、Nginx 的高并发静态服务及 PHP 的 opcache 与 session 优化, 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

【MySQL技术内幕】49-事务的实现之group commit

该参数的默认值为0,且推荐设置依然为0。但当有事务进行这个过程时,其他事务可以进行步骤1)的操作,正在提交的事物完成提交操作后,再次进行步骤2)时,可以将多个事务的重做日志通过一次fsync刷新到磁盘,这样就大大地减少了磁盘的压力,从而提高了数据库的整体性能。代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等。

smart_an的专栏 1007

从MySQL的源码剖析Innodb buffer的命中率计算

按官方手册推荐Innodb buffer Hit Ratios的计算是:   100-((iReads / iReadRequests)*100) iReads : mysql->status->Innodb_buffer_pool_reads iReadRequests: mysql->status->Innodb_buffer_pool_read_requests 出处: http://dev.mysql.com/doc/mysql-monitor/2.0/en/mem_graphref.html 搜”Hit Ratios” 推荐有兴趣的同学把这个页面都看一下应该也会有很大收获. 另

InnoDB(7.3):事务——purge操作与group commit

Purgepurge实现清理undo页purge的相关参数group commit拓展:InnoDB1.2版本之前,group commit的不足BLGCBLGC的实现步骤 前面提到过,事务的delte和update操作是不直接删除原有数据的,都是采用标记删除,即在undo log页标记为删除,但在实际的B+树索引还是有该记录的,真正删除这行记录的操作其实被时延了,最终是在Purge操作中完成的 Purge purge操作其实是为了支持MySQL的MVCC,所以记录不能在事务提交时就立即进行处理,因为可能.

GDUT_Trim的博客 668

从配置字到实际运动:手把手教你用EtherCAT调试伺服电机的控制模式(以倍福TwinCAT3为例)

本文详细介绍了如何使用EtherCAT调试伺服电机的控制模式,以倍福TwinCAT3为例。从环境搭建、模式配置到状态机切换,提供了完整的操作指南和典型故障排查方法,帮助工程师快速解决‘配置字写入了但电机不转’等常见问题,提升工业自动化现场的调试效率。

weixin_42783709的博客 421

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8960

mysql group commit_量化InnoDB group commit的效果

前几天有位开发的同学问了个问题,InnoDB的group commit效果如何?之前说好了回头给看下,结果险些拖过年。Group commit背景InnoDB的redo log的group commit历史比较悠久了(有别于binlog的group commit)。如果设置为1,每次事务提交都至少需要写一次redolog。这对IOPS冲击严重,尤其是在HDD上,直接成为性能瓶颈。Group com...

weixin_39677106的博客 133

UE5摄像机抖动全攻略:从Perlin噪点到Sequence实战(附参数调优技巧)

本文深入解析UE5摄像机抖动技术,从Perlin噪点算法到CameraShakeBase蓝图应用,再到Sequence高级控制,提供全面的参数调优技巧。涵盖战斗、爆炸等场景的预设参数,帮助开发者实现专业级抖动效果,提升游戏沉浸感。

weixin_30300225的博客 97

InnoDB关于group commit的简单QA

原文:http://dinglin.iteye.com/blog/1174780  前天同事问了个问题,今天又再翻了下group commit。关于这个话题Kristian Nielsen有一个很详尽的系列文章(http://kristiannielsen.livejournal.com/12254.html), 有四个页面,文中有链接。这里列出一些细节,主要是对上面文章补充一下。

qiuyepiaoling的专栏 611

深度学习 load_data_fashion_mnist

pytorch 中报错:PermissionError: [WinError 5] 拒绝访问。: '…/data’ 在学习李沐大神动手学习深度学习卷积神经网络章节中,调用d2l包中load_data_fashion_mnist报错,这可能是***权限***的问题。 batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size,batch_size) 我的解决方法是 重新定义一下 load_data_fashi

纸上得来终觉浅,绝知此事要躬行 9148

XIAO ESP32S3 Sense摄像头与麦克风实战:从硬件连接到AI语音视觉项目

本文详细介绍了如何使用Seeed Studio XIAO ESP32S3 Sense开发板进行AI语音视觉项目开发。从硬件连接到Arduino环境搭建,再到摄像头拍照、视频流传输、麦克风录音等实战操作,最后引导读者探索基于TensorFlow Lite Micro的语音唤醒和SenseCraft AI的图像识别等AI应用,为物联网和边缘AI项目提供了完整的入门指南。

xray4的博客 1025

MySQL系列:innodb源码分析之基础数据结构

近一年来一直在分析关于数据库相关的源码,前段时间分析了levelDB的实现和BeansDB的实现,这两个数据库网络上分析的文章很多,也都比较分析的比较深,所以也就没有太多必要重复劳动。最近开始关注关系数据库和MYSQL,当然主要还是数据库存储引擎,首先我还是从innodb这个最流行的开源关系数据库引擎着手来逐步分析和理解。我一般分析源码的时候都是从基础的数据结构和算法逐步往上分析,遇到不明白的地方

zerok的专栏 8275

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

MySQL8 源码编译、主从复制与 MGR 集群实战教程

本文基于多台 CentOS 虚拟机完整实操 MySQL8 全流程,涵盖高版本 cmake、GCC 环境部署,MySQL 源码编译、目录权限、system 服务配置;搭建 phpMyAdmin 网页管理工具,实操一主多从异步复制、GTID 自动点位、半同步复制、延迟从库;讲解并行复制、慢查询优化,最后部署三节点 MGR 多主组复制集群,配套数据备份、账号报错修复、业务建表实操,适合数据库运维进阶实训。

2401_84291419的博客 185

7 中望CAD二次开发-标注(一)(ZRX C++)

尺寸标注是CAD设计中最常用的功能之一,软件内置了很多标注功能,可以通过使用这些标注工具,对需要标注的长度、角度等一个个进行标注。但这显然效率很低,学习CAD二次开发,就是要把人从重复的劳动中解放出来,实现批量标注。本文介绍,如何通过二次开发进行标注。

cilvsuanna的博客 340

python基于pingouin统计分析:rm_corr计算两个变量之间的重复测量相关性(Repeated measures correlation、plot_rm_corr函数可视化重复测量相关性图

python基于pingouin包进行统计分析:使用rm_corr函数计算两个变量之间的重复测量相关性(Repeated measures correlation)、plot_rm_corr函数可视化重复测量相关性图

statistics+insight+vista+power 680

Linux系统下MySQL安装包部署全攻略:从环境准备到安全调优

数据库作为现代应用的核心组件,其部署方式直接影响系统的稳定性和性能。在Linux环境中,通过安装包(Tarball)手动部署MySQL,是深入理解数据库运行机制、实现精细化控制的关键技术路径。相比容器化方案,这种方式赋予管理员对安装路径、数据目录和配置文件的完全控制权,便于多实例部署和特定版本管理。其技术价值在于能够根据服务器硬件特性和业务需求进行深度定制,尤其适合生产环境对极致稳定性和性能调优的要求。在实际应用场景中,无论是维护遗留系统所需的MySQL 5.7版本,还是部署具备最新特性的MySQL 8.0

Hi, Sun 513

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MySQL 5.5 在CentOS 7的完整部署、配置与运维实战指南

数据库作为信息系统的核心组件,其稳定运行依赖于合理的部署、配置与运维。以MySQL为代表的关系型数据库,通过其存储引擎、查询优化器等核心机制,管理着结构化数据,支撑着从Web应用到企业核心系统的各类业务。理解数据库的安装部署、参数调优与日常维护,对于保障数据安全与系统性能至关重要。尤其在处理历史遗留系统或特定稳定版本需求时,掌握特定版本如MySQL 5.5的部署技能,成为一项关键的工程实践能力。本文聚焦于在CentOS 7环境下,从零开始完成MySQL 5.5的安装,并深入解析其核心配置参数如innodb_

weixin_34025151的博客 492

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux下MySQL安装包部署全攻略:从规划到生产环境配置

数据库部署是系统架构中的基础环节,其核心在于对数据存储、访问和管理的精细化控制。通过理解数据库服务的运行原理,我们可以根据不同的业务场景选择最合适的部署方式,从而在性能、安全性和可维护性之间取得平衡。对于追求高度可控和定制化的生产环境,使用官方安装包(Tarball)进行部署成为关键技术选择。这种方式将版本选择、目录规划、配置调优和权限管理的控制权完全交还给运维人员,尤其适合需要长期稳定运行、有特定版本要求或严格合规需求的服务器。本文聚焦于MySQL在Linux系统上的安装包部署实践,详细解析了从环境检查、

weixin_34221775的博客 354

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux第20篇:MySQL/PostgreSQL数据库部署与调优:SaaS应用的数据底座

本文系统讲解在Linux生产环境下部署MySQL 8.0与PostgreSQL 16两大开源数据库的完整流程,涵盖安装配置、安全加固、性能调优与备份恢复策略,帮助Java SaaS团队构建稳定高效的数据存储底座。

qq_23625847的博客 406

CentOS 8 LEMP部署实战:Nginx+MySQL 8.0+PHP-FPM调优指南

LEMP栈是Linux环境下经典的Web应用基础架构,由Nginx、MySQL和PHP协同构成,广泛应用于中小规模生产系统。其核心原理在于Nginx的事件驱动模型实现高并发静态服务,MySQL 8.0通过caching_sha2_password认证插件提升连接安全性与性能,PHP-FPM则以ondemand等进程管理模式动态适配资源负载。该技术组合具备轻量、稳定、可维护性强的技术价值,特别适合政务云、企业内网及遗留系统运维场景。本文聚焦CentOS 8这一EOL但仍在大量服役的操作系统,深入解析Nginx

weixin_34413103的博客 336

安装配置生产级CentOS7 Minimal

前言 在开发过程中有时候需要Centos环境,本文将记录安装CentOS7 Minimal的过程 一、下载安装包 在官网下载CentOS7 Minimal(简化版)安装包 二、在虚拟机中安装系统 在虚拟机中安装系统 三、配置网络 新的系统是没有连接网络的下面我们通过固定IP的方式来配置网络 vi /etc/sysconfig/network-scripts/ifcfg-XXXX(...

Bonrui编程路 1921

Linux - VMware搭建CentOS环境

本文提供了在VMware虚拟机上安装CentOS7系统及部署常用软件的完整教程。主要内容包括:1)VMware和CentOS7的安装配置,含网络设置和快照功能;2)CentOS7系统环境配置,包括yum源设置、EPEL安装和基础工具安装;3)MySQL部署过程,涵盖安装、配置、安全设置和远程访问;4)Redis安装与配置,包含编译安装、防火墙设置和开机自启;5)Java应用部署方法,涉及JDK安装、应用调试和systemctl服务配置。教程提供了详细的操作命令和配置示例,并附有相关参考链接,适合需要搭建Li

yuyehui的博客 595

麒麟系统服务器版本x86架构&arm架构部署过程

编译完成后nginx默认安装在**/usr/local/nginx** 路径下。编译完成后nginx默认安装在**/usr/local/nginx** 路径下。**启动mysql服务 ****启动mysql服务 **** 将用户添加到组中**** 将用户添加到组中**

qq_41627017的博客 1439

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+
上一篇: MySQL“异象”分析:备库的io util比主库重?
下一篇: 一种MySQL主从同步加速方案
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值