PostgreSQL通过索引获取heap tuple解析

简介: PostgreSQL通过索引获取heap tuple解析

本文介绍通过索引扫描获取heap tuple的TID后,如何通过TID获取heap tuple。

一、先介绍两个数据结构关系

二、接着介绍获取记录流程

1、通过索引扫描后,得到索引记录(key,tid),接着需要通过tid获取对应的heap记录。通过tid获取heap记录的动作由表访问方法接口heapam_index_fetch_tuple函数完成。

2、首先将scan强制转换IndexFetchHeapData类型hscan;slot转换类型BufferHeapTupleTableSlot bslot。

3、call_again初始传进来为false

4、先将hscan->xs_cbuf保存起来,然后调用ReleaseAndReadBuffer读取磁盘页到buffer,该buffer的ID保存到hscan->xs_cbuf

5、页内通过tid获取记录需要在buf描述符content_lock的BUFFER_LOCK_SHARE内进行

6、调用heap_hot_search_buffer在对应buffer内通过tid获取对应heap记录,这里会遇到heap only tuple的情况:

 1)通过tid得到heap的页号及记录索引号。如果进行update过,该tid是第一个打上delete标签的记录,而这个记录的t_ctid会指向新insert的记录。

 2)第一次进来,at_chain_start标记为TRUE即HOT链的起始记录

 3)根据tid解析出的页号和索引号得到记录的索引

 4)第一次进来,并且记录被修剪了,即老记录的索引号指向了最新记录的索引号,此时获取最新记录的索引号,返回3)循环获取其索引并进行判断

 5)记录为最新记录时,获取tuple值并保存到heapTuple中

 6)排除被修剪,第一次进来获取对应tuple后调用HeapTupleSatisfiesVisibility判断可见性,以及隔离性。若可见则返回TRUE,找到记录了;否则第一个记录类型为HOT UPDATED,通过其t_ctid定位到新版本,然后获取并循环开始进行判断

7、找到记录后将tid保持大bslot->base.tupdata.t_self中,然后解锁

8、若找到记录,则将记录保存到slot中,并返回上层。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
存储 关系型数据库 数据库
postgresql|数据库|提升查询性能的物化视图解析
postgresql|数据库|提升查询性能的物化视图解析
2177 0
|
存储 数据库 C++
"深入剖析Python元组(tuple):与列表的对比、特性解析及高效应用场景展示"
【8月更文挑战第9天】Python元组与列表虽均用于存储元素集合,但有本质差异。元组不可变,创建后无法修改,适合保护数据不被意外更改的场景,如作字典键或传递固定值。列表则可变,支持动态增删改,适用于需频繁调整的数据集。元组因不可变性而在性能上有优势,可用于快速查找。两者各有千秋,根据具体需求选择使用。例如,元组可用于表示坐标点或日期,而列表更适合管理用户列表或库存。
1463 1
|
存储 缓存 关系型数据库
关系型数据库MySQL的Memory (HEAP)
【6月更文挑战第17天】
432 4
|
SQL 关系型数据库 数据库连接
ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析
ClickHouse的PostgreSQL引擎允许直接查询和插入远程PostgreSQL服务器的数据。`CREATE TABLE`语句示例展示了如何定义这样的表,包括服务器信息和权限。查询在只读事务中执行,简单筛选在PostgreSQL端处理,复杂操作在ClickHouse端完成。`INSERT`通过`COPY`命令在PostgreSQL事务中进行。注意,数组类型的处理和Nullable列的行为。示例展示了如何从PostgreSQL到ClickHouse同步数据。一系列的文章详细解释了ClickHouse的各种特性和表引擎。
877 0
|
SQL 关系型数据库 API
从API获取数据并将其插入到PostgreSQL数据库:步骤解析
使用Python处理从API获取的数据并插入到PostgreSQL数据库:安装`psycopg2`,建立数据库连接,确保DataFrame与表结构匹配,然后使用`to_sql`方法将数据插入到已存在的表中。注意数据准备、权限设置、性能优化和安全处理。
|
SQL 关系型数据库 数据库
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
2198 0
|
前端开发 关系型数据库 Go
《PostgreSQL事务管理深入解析》
《PostgreSQL事务管理深入解析》
362 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 的事务管理和并发控制机制解析
PostgreSQL 的事务管理和并发控制机制解析
659 0
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
2267 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
3165 2

热门文章

最新文章

推荐镜像

更多