当前位置: 首页 > article >正文

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;


http://www.kler.cn/a/584069.html

相关文章:

  • Linux第二次练习
  • hive-进阶版-1
  • 嵌入式开发工程师笔试面试指南-模电基础
  • 查找某个端口是否被占用
  • 【数据结构】4线性表综合实验
  • 前端学习笔记(三)——ant-design vue表单传递数据到父页面
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • 单机DeepSeek做PPT,YYDS!
  • 大语言模型的潜力是否被高估
  • C# 发送邮件 报错:此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。
  • Denoising as Adaptation Noise-Space Domain Adaptation for Image Restoration
  • 【守护蓝色星球】《海洋环境保护法》的重要性与遵守主体
  • Redis三大件 穿透、雪崩、击穿
  • 如何自己做奶茶,从此告别奶茶店
  • Appium高级操作--ActionChains类、Toast元素识别、Hybrid App操作、手机系统API的操作
  • CSS-复合选择器、元素显示模式、背景
  • Java核心技术卷1
  • 得物 Android Crash 治理实践
  • 网关的详细介绍
  • 星越L_副驾驶屏使用讲解