Postgresql 存储结构

Postgresql 存储结构

存储系统是 PostgreSQL 的最底层模块,它向下通过操作系统接口访问物理数据,向上为上层模块提供存储操作的接口和函数。本文目的是了解和掌握postgresql的存储结构。

PG数据存储结构分为:逻辑结构和物理存储。
其中逻辑存储结构是内部的组织和管理数据的方式。
物理存储结构是操作系统中组织和管理数据的方式。
逻辑存储结构适用于不同的操作系统和硬件平台。

数据目录

postgresql安装完成后必须先使用Initdb程序初始化磁盘上的数据存储区,生成模板数据库和相应的目录、文件信息。

初始化目录中包含数据文件、参数文件、控制文件、运行日志及wal日志文件等。

默认情况下,postgresql中的所有数据都存储在其数据目录里。$PGDATA/base里存储了名为对应数据库oid的子目录。每个数据库的表数据都存储其所属的独立文件里,文件以该表的filenode号命名,为了避免有些文件系统不支持大文件,postgresql限制了表文件大小不能超过1GB,当表文件超过1GB时,会另外创建一个有尾缀的文件,relfilenode.1,relfilenode.2…

查看数据库oid
在这里插入图片描述
查看表的filenode
在这里插入图片描述

数据文件结构

在pg中,磁盘存储和内存中的最小管理单位都是块。
保存在磁盘中的数据块成为page;
内存中的数据块称为buffer;
表和索引称为relation;
行称为tuple。
数据的读写是以page为最小单位,每个page默认大小为8kb。
每个page包含若干个tuple。

数据块解析

在这里插入图片描述在这里插入图片描述

page 默认大小 8k,由5部分构成:
PageHeaderData:在page头部,24个字节长度,记录page元数据信息;
pg_lsn:存储page最近更新时,wal日志的lsn信息;
pg_checksum:存储page的校验值;
pd_flags:标志位;
pg_lower:到空闲空间开头的偏移量;
pg_upper:到空闲空间结尾的偏移量;
pd_pagesize_version:页面大小和布局版本号信息;
pd_prune_xid:页面最早未删除xmax,如果没有则为0;
ItemidData:在page header之后,一个记录(偏移量、长度)对的数组,指向实际tuple项,每个4字节。
free space:未分配的空间(空闲空间),新项指针从这个区域的开头开始分配,新项从其结尾开始分配。
special space:索引访问模式相关的数据,不同的索引访问方式存放不同的数据,在普通表中为空。

Pageinspect 扩展

postgresql 在源码目录 contrib 下提供了许多扩展的功能,pageinspect 扩展模块提供的函数让你从低层次观察数据库页面的内容,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值