C/C++教程

mvcc简单示例

本文主要是介绍mvcc简单示例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【测试方法】

插入一行数据

session1:开启事务,更新这一行,不提交

session2:select * from t1;

 

【代码过程】

HeapTupleSatisfiesMVCC函数

1)session1能看到第二行

1.1) 1015行,TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetRawXmin(tuple) == true

当前事务613,和第二行xmin相等

1.2)  1021行,(tuple->t_infomask & HEAP_XMAX_INVALID),max是0

返回true

 

2)session2能看到第一行

971行,!HeapTupleHeaderXminCommitted(tuple) ,已经提交,不进入if内逻辑

判断tuple二进制的第九位

#2306 = 1001 0000 0010

#& 0x0100

#1001 0000 0010
#      1 0000 0000
&结果=1
取反是0

 

3)session2不能看到第二行

3.1) 971行if判断为true

3.2) 1057行,XidInMVCCSnapshot(HeapTupleHeaderGetRawXmin(tuple), snapshot)==true,return false

都是613

 

【这个快照的逻辑】

1)上面检查在哪获取的这个快照

SeqScanState *node->ss->ss_currentScanDesc->rs_snapshot->xmin

2)如何生成的快照

这篇关于mvcc简单示例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!