PostgreSQL源码学习(1)Page页

PostgreSQL源码学习(1)Page页参考PG官方文档对于Page页存储的描述。https://www.postgresql.org/docs/12/storage-page-layout.html。 The Internals of …

PostgreSQL源码学习(1)Page页

The Internals of PostgreSQL中对于存储的描述http://www.interdb.jp/pg/pgsql01.html#_1.2.

每个表或索引都作为一个page数组存储于物理数据文件中(page大小默认为8k,编译时可以指定),单个的表数据文件中包含多个page页(默认单个表文件最大1G,超过1G后会新建同名+“.1”后缀的数据文件,依次累加,同样在编译时可以指定单个文件的最大值)。page页的结构如下图所示。

page页的结构

而对于page页中存储的行数据Tuple,其结构为下图所示。 Heap Tuple结构

相关数据结构

// src/include/storage/bufpage.h

typedef struct PageHeaderData
{
	/* XXX LSN is member of *any* block, not only page-organized ones */
	PageXLogRecPtr pd_lsn;		/* LSN: next byte after last byte of xlog
								 * record for last change to this page */
	uint16		pd_checksum;	/* checksum */
	uint16		pd_flags;		/* flag bits, see below */
	LocationIndex pd_lower;		/* offset to start of free space */
	LocationIndex pd_upper;		/* offset to end of free space */
	LocationIndex pd_special;	/* offset to start of special space */
	uint16		pd_pagesize_version;
	TransactionId pd_prune_xid; /* oldest prunable XID, or zero if none */
	ItemIdData	pd_linp[FLEXIBLE_ARRAY_MEMBER]; /* line pointer array */
} PageHeaderData;

代码100分

代码100分// src/include/storage/itemid.h

typedef struct ItemIdData
{
	unsigned	lp_off:15,		/* offset to tuple (from start of page) */
				lp_flags:2,		/* state of line pointer, see below */
				lp_len:15;		/* byte length of tuple */
} ItemIdData;

/*
 * lp_flags has these possible states.  An UNUSED line pointer is available
 * for immediate re-use, the other states are not.
 */
#define LP_UNUSED		0		/* unused (should always have lp_len=0) */
#define LP_NORMAL		1		/* used (should always have lp_len>0) */
#define LP_REDIRECT		2		/* HOT redirect (should have lp_len=0) */
#define LP_DEAD			3		/* dead, may or may not have storage */
// src/include/access/htup_details.h

struct HeapTupleHeaderData
{
	union
	{
		HeapTupleFields t_heap;
		DatumTupleFields t_datum;
	}			t_choice;

	ItemPointerData t_ctid;		/* current TID of this or newer tuple (or a
								 * speculative insertion token) */

	/* Fields below here must match MinimalTupleData! */

#define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK2 2
	uint16		t_infomask2;	/* number of attributes + various flags */

#define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK 3
	uint16		t_infomask;		/* various flag bits, see below */

#define FIELDNO_HEAPTUPLEHEADERDATA_HOFF 4
	uint8		t_hoff;			/* sizeof header incl. bitmap, padding */

	/* ^ - 23 bytes - ^ */

#define FIELDNO_HEAPTUPLEHEADERDATA_BITS 5
	bits8		t_bits[FLEXIBLE_ARRAY_MEMBER];	/* bitmap of NULLs */

	/* MORE DATA FOLLOWS AT END OF STRUCT */
};
代码100分// src/include/access/htup.h

typedef struct HeapTupleData
{
	uint32		t_len;			/* length of *t_data */
	ItemPointerData t_self;		/* SelfItemPointer */
	Oid			t_tableOid;		/* table the tuple came from */
#define FIELDNO_HEAPTUPLEDATA_DATA 3
	HeapTupleHeader t_data;		/* -> tuple header and data */
} HeapTupleData;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9102.html

(0)
上一篇 2023-02-15
下一篇 2023-02-15

相关推荐

  • 【Spring】JdbcTemplate的使用方法

    【Spring】JdbcTemplate的使用方法
    JdbcTemplate(概念和准备) 什么是 JdbcTemplate Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现…

    2023-04-01
    157
  • PostgreSQL 内存表「建议收藏」

    PostgreSQL 内存表「建议收藏」在某些场景,要求快速的DML,并且对数据可靠性要求不是非常高。
    例如游戏的会话信息,传感器上传的最新数据,运算的中间结果,等等。
    例如在一个场景中,有非常多的传感器的数据要不断的被更新和查询,可以使用

    2023-04-28
    155
  • 如何查找Python安装目录位置

    如何查找Python安装目录位置Python是一个开放源代码高级编程语言,可以实现多种不同的编程范式(如面向过程、函数式和面向对象编程等)。它被广泛地应用于Web开发、科学计算、数据分析和人工智能等领域。由于Python可以在不同操作系统上运行,因此你需要知道如何查找Python安装目录位置,以便在需要的时候快速找到Python程序和库等文件。

    2024-06-23
    42
  • Python re库安装教程

    Python re库安装教程Python是一种简单易学的语言,它在数据分析、网络爬虫等领域得到了广泛的应用。正则表达式(Regular Expression,简称RE),是Python中处理字符串的常用工具之一。本篇文章将介绍如何在Python中安装re库并使用它来处理字符串。

    2024-07-19
    33
  • Python字典:高效存储和快速查找数据的利器

    Python字典:高效存储和快速查找数据的利器Python是一种高级编程语言,它的数据结构——字典(Dictionary)被广泛应用于各种场景。字典是一种类似于哈希表的数据结构,是一种由键(Key)和值(Value)组成的可变集合。Python字典使用哈希表来存储和查找元素,因此,它是一种高效的存储和快速查找数据的利器。

    2024-02-26
    115
  • python之强大的第三方模块(python中的第三方提供的可用编程模块)

    python之强大的第三方模块(python中的第三方提供的可用编程模块)Python常用库大全,看看有没有你需要的。

    2023-12-07
    115
  • Python遍历列表基础知识

    Python遍历列表基础知识Python是一种高级编程语言,使用简单,并且具有强大的语言特性。Python的列表是一个非常有用的数据类型,使用广泛,它可以存储任何类型的数据,包括整数,浮点数,字符串等。本文将以Python列表为中心,介绍如何遍历一个Python列表,展示一些Python列表的操作技巧。

    2024-09-04
    12
  • 罗景:连接效率优化实践[亲测有效]

    罗景:连接效率优化实践[亲测有效]分享嘉宾:罗景 58同城 高级架构师 编辑整理:洪鹏飞 内容来源:DataFun AI Talk《连接效率优化实践》 出品社区:DataFun **导读:**本次分享由以下几个部分构成—— 58的业务

    2023-05-22
    142

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注