本节是SeqNext函数介绍的第二部分,主要介绍了SeqNext->heap_getnext函数的实现逻辑。TupleTableSlot
Tuple Table Slot,用于存储元组相关信息HeapTuple
HeapTupleData是一个指向元组的内存数据结构
HeapTuple是指向HeapTupleData指针HeapScanDesc
HeapScanDesc是指向HeapScanDescData结构体的指针ScanState
ScanState扩展了对表示底层关系扫描的节点类型的PlanState。heap_getnext函数从数据表中获取下一个tuple.根据ScanDesc->rs_pageatatime的设定,如为T,则调用heapgettup_pagemode函数,使用page-at-a-time模式提取元组,否则调用函数heapgettup使用常规模式提取.测试脚本如下启动gdb,设置断点,进入heap_getnext查看输入参数,注意rs_pageatatime = true,使用page-at-a-time模式查询进入heapgettup_pagemode函数heapgettup_pagemode->变量赋值,注意tuple还是一个”野”指针;尚未初始化p scan->rs_inited = falseheapgettup_pagemode->非并行扫描,page = scan->rs_startblock(即page = 0)进入heapgetpageheapgetpage->检查验证&读取pageheapgetpage->rs_cbuf为346/rs_cblock为0heapgetpage->page-at-a-time模式读取,变量赋值,锁定缓冲区heapgetpage->获取page,检查快照是否过旧,获取行数heapgetpage->验证可见性heapgettup_pagemode->退出heapgetpage,回到heapgettup_pagemode,初始化lineindex为0,设置rs_inited为Theapgettup_pagemode->获取page,验证快照是否过旧heapgettup_pagemode->计算Item数,开始循环heapgettup_pagemode-&免费云主机域名gt;获取Item偏移(lineoff)和ItemIdheapgettup_pagemode->给tuple中的变量赋值,ItemPointer是ItemPointerData结构体指针heapgettup_pagemode->设置scan->rs_cindex,返回回到heap_getnext返回获得的tuple结束第一次调用,再次进入该函数查看输入参数scan,与上一次有所不同,存储了上一次调用返回的一些信息,如rs_vistuples等DONE!PostgreSQL Page页结构解析(1)-基础
PostgreSQL Page页结构解析(2)- 页头和行数据指针
PostgreSQL Page页结构解析(3)- 行数据
一.学习的东西越多,越需要整理,于是就有诞生了该博客。作为第一篇博客,必须是oracle了,因为我要做DBA。废话不多说,搞起。 二.准备工作:10201_database_linux32.zip. libXp-1.0.0-8.1.el5.i386.rpm(该…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。