MySQL-Transaction ID(Xid)

我们知道MySQL-Innodb中最重要的就是事务
事务的完整生命周期之前已经讲过了事务的完整生命周期

但是发现很多人对事务ID都有很大的误解。今天为大家详细说明一下。
事务ID最早是出现在什么时候?
当然是用户在客户端执行

begin;

并敲下 “回车” 的时候。
此时innodb会通过transaction.xid_state.xid.get_mysql_xid()来生成Transaction ID(即Xid)
而get_mysql_xid()则封装了

  • mysql_xid_init(): 初始化Xid结构体,包括设置时间戳和服务器ID等信息。
  • mysql_xid_next(): 获取下一个可用的Xid,即生成一个新的Transaction ID。
  • 在这里插入图片描述
    当然生成的Xid并不会直接记录到binlog中,而是先落到undo上,在事务结束时通过xid_event写入binlog文件中。
    解析binlog文件即可看到每个事务的最后都有相应的Xid
    在这里插入图片描述
    需要注意的是:这里看到的Xid并不是原始的Xid,而是解析为16进制的Xid。
    在这里插入图片描述
彩蛋

发现网上很多人都认为事务id是由query_id自增来的。
其实并不是,所谓的query_id是对每个连接到mysql的会话分配的id,通常开启general.log就可以看到。
在这里插入图片描述
同时很多人对Xid和trx_id也没有分清,关于trx_id及其作用可以查看这篇文章
MySQL-trx_id及其作用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值