PostgreSQL存储管理体系结构学习笔记2

1.表 和元组的组织方式

在PostgreSQL中,同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联,这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件:普通堆,临时堆,序列,TOAST表。尽管这几种堆文件功能各异,但在底层的文件结构却是相似的:每个堆文件都是由多个文件块组成,在物理磁盘中的存储形式如下图所示:

其中PageHeaderData是长度为20字节的页头数据,包含文件块的一般信息

Linp是ItemIdData类型的数组,ItemIdData类型由lp_off、lp_flags和lp_len三个属性组成。

Freespace是指未分配的空间。

Special space是特殊空间,用于存放与索引方法相关的特定数据。

2.磁盘管理器

磁盘管理器是SMGR的一种具体实现,它对外提供了管理磁盘介质的接口,其主要实现在文件md.c中。磁盘管理器并非对磁盘上的文件直接进行操作,而是通过VFD机制来进行文件操作。

3.VFD机制

在操作系统中,当一个进程创建或是打开一个文件时,操作系统会为该文件分配一个唯一文件描述符,并通过该文件描述符来唯一标识和操作该文件。由于每个操作系统都对一个进程能打开的文件数加以限制,因此进程能获得的文件描述符是有限的。对于经常需要打开很多文件的数据库进程来说,很容易就会超过操作系统对于文件描述符数量的限制。为了解决这个问题,在PostgreSQL中使用了虚拟文件描述符机制(VFD)。以下为Vfd的数据结构:

typedef struct vfd

{

int fd; /* current FD, or VFD_CLOSED if none */

unsigned short fdstate; /* bitflags for VFD's state */

ResourceOwner resowner; /* owner, for automatic cleanup */

File nextFree; /* link to next free VFD, if in freelist */

File lruMoreRecently; /* doubly linked recency-of-use list */

File lruLessRecently;

off_t fileSize; /* current size of file (0 if not temporary) */

char *fileName; /* name of file, or NULL for unused VFD */

int fileFlags; /* open(2) flags for (re)opening the file */

mode_t fileMode; /* mode to pass to open(2) */

} Vfd;

相关推荐
野犬寒鸦3 分钟前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
晚霞的不甘1 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位2 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
海奥华22 小时前
mysql索引
数据库·mysql
2601_949593652 小时前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
javachen__2 小时前
mysql新老项目版本选择
数据库·mysql
Dxy12393102163 小时前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light3 小时前
MySQL相关问题
数据库·mysql
蜡笔小炘3 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长3 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游