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

MySQL Xid、trx_id 作用及区别

1、Xid:

Xid是用来联系bin log和redo log的。

存在于binlog和redolog之中。

在宕机后进行恢复时,判断事务是否已经提交成功,还是说需要回滚。

比如redo log里面有一个事务是prepare状态(第1阶段提交),那就可以用Xid去binlog里面查询该事务有没有提交:

  • binlog有提交:则认为即使redolog中的事务是prepare也认为提交成功了(即:只要完整写入了binlog,即使没有第2阶段提交redolog了,也认为没有那个必要了);
  • 若binlog中没有提交:则回滚该事务。

Xid是由server层维护的:Xid首先是存在于binlog的,即Xid的根在binlog。

show binary log;
show binlog events in 'mysql-bin.000002';

分析输出,可以看到Xid的身影:

  •     由dml组成的事务才会有,标志着事务的结束(COMMIT)
  •     Xid在ddl事务中没有,可将Query值视为Xid

另外,Gtid在dml ddl事务中都有,标志着事务的开始(BEGIN GTID ...)。

InnoDB存储引擎为了进一步支持实例恢复而发明的redolog,借用了Xid。

InnoDB存储引擎层内部借用server层的 Xid,就是为了能够在 InnoDB 事务和 server 之间做关联。

2、trx_id:

trx_id一大作用是用来联系MVCC版本链和.dbf文件的。(trx_id是事务对象的主键,唯一标识一个事务对象)

存在于.dbf文件()中,以及MVCC版本链中。(.dbf文件中每行数据都有个对应的trx_id,表示这行数据是由哪个trx_id事务造成的)

在MVCC版本链快照读取时,会判断这行数据能否读到。

比如trx_id会随着事务执行增删改时,写入.dbf文件(表示这行数据是由哪个trx_id事务造成);这些trx_id也会随着事务的开始写入MVCC版本链中。用于判断能否读到这个版本的数据。

trx_id是由存储引擎层维护的。

3、两者比较:

Xid 和 InnoDB 的 trx_id 是两个容易混淆的概念。Xid 是由 server 层维护的。InnoDB 内部使用 Xid,就是为了能够在 InnoDB 事务和 server 之间做关联。但是,InnoDB 自己的 trx_id,是另外维护的。

trx_id,innodb存储引擎层,由InnoDB维护,是事务对象的主键,唯一标识一个事务对象。同时dbf每行数据都有个对应的trx_id,表示这行数据是由哪个trx_id事务造成的。作用:MVCC版本链读取时,会判断这行数据能否读到。 Xid,server层,但MySQL使用Xid,作为引擎层redolog和server层binlog的桥梁,用于实例恢复时判断事务是否成功提交的依据。

相关文章:

  • 11.1 Go 标准库的组成
  • 每日一练:攻防世界:ewm
  • H5小程序视频编辑解决方案,广泛适用,灵活部署
  • 【编程语言】Python平台化为何比Java差?
  • 接手一个系统并快速入手 这里是一些建议
  • 上位机图像处理和嵌入式模块部署(h750 mcu和图像处理)
  • C和C++动态分配内存方法是什么,有什么区别?本质区别是什么?【面试】
  • 餐厅点餐系统的设计
  • 欣九康诊疗系统助力诊所向数字化转型
  • maven 显式依赖包包含隐式依赖包,引起依赖包冲突
  • Web前端设计实验小结:探索、挑战与成长之路
  • 26.模型文件的读写
  • 近期docker镜像加速器被封杀,需要的请看此内容 点赞加关注
  • PDF格式分析(八十六)——修订注释(Redaction)
  • 单调栈(续)、由斐波那契数列讲述矩阵快速降幂技巧
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【刷算法】求1+2+3+...+n
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Intervention/image 图片处理扩展包的安装和使用
  • Material Design
  • Node 版本管理
  • session共享问题解决方案
  • Shell编程
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring框架之我见(三)——IOC、AOP
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端技术周刊 2019-02-11 Serverless
  • 深度解析利用ES6进行Promise封装总结
  • 使用 QuickBI 搭建酷炫可视化分析
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数组大概知多少
  • 微信公众号开发小记——5.python微信红包
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 容器镜像
  • ​Linux·i2c驱动架构​
  • #Java第九次作业--输入输出流和文件操作
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (BFS)hdoj2377-Bus Pass
  • (C)一些题4
  • (k8s中)docker netty OOM问题记录
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (算法)N皇后问题
  • (算法)前K大的和
  • (转载)Linux网络编程入门
  • ./和../以及/和~之间的区别
  • .NET Core WebAPI中封装Swagger配置
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008