大云海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesSelf函数

# 海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesSelf函数
本文介绍了事务执行过程中,检查一个堆元组是否对当前事务可见,用于确保事务可以看到正确的数据版本。

HeapTupleSatisfiesSelf函数源码解读

HeapTupleSatisfiesSelf:用于判断一个元组是否对当前事务可见;

函数声明
static bool
HeapTupleSatisfiesSelf(HeapTuple htup, Snapshot snapshot, Buffer buffer)

参数说明:

  • HeapTuple htup:指向堆元组的指针;
  • Snapshot snapshot:元组对应的快照;
  • Buffer buffer:包含堆元组的缓冲区。
函数说明:

该函数用于判断一个元组(tuple)是否对其自身有效,决定了当前事务能否看到某个特定的元组版本。该函数的流程图如下:

在这里插入图片描述

HeapTupleSatisfiesSelf函数过程
  • 获取元组头,并确保元组的自指针和元组的表OID有效
	HeapTupleHeader tuple = htup->t_data;

	Assert(ItemPointerIsValid(&htup->t_self));
	Assert(htup->t_tableOid != InvalidOid);
首先,检查Xmin事务是否已经提交,如果没有提交,执行以下过程;
	if (!HeapTupleHeaderXminCommitted(tuple))
	{
		/* 1.检查元组的Xmin有效性 */
		/* 2.检查元组是否被标记为HEAP_MOVED_OFF */
		/* 3.检查元组是否被标记为HEAP_MOVED_IN  */
		/* 4.检查Xmin事务ID是否为当前事务  */
		/* 5.检查Xmin事务ID是否为在运行中  */
		/* 6.检查Xmin事务ID是否为已经提交  */
		/* 7.其他(事务中止或系统崩溃) */
	}
  1. 如果Xmin事务已经提交或者中止,返回false;
	if (He
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值