脚本宝典收集整理的这篇文章主要介绍了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简单示例全部内容,希望文章能够帮你解决mvcc简单示例所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。