MySQL Xid、trx_id 作用及区别

2024-06-14 18:20

本文主要是介绍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的桥梁,用于实例恢复时判断事务是否成功提交的依据。

这篇关于MySQL Xid、trx_id 作用及区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061167

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满