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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值