加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

超详细的PG数据存储结构:逻辑结构和物理存储总结

发布时间:2019-08-06 22:49:02 所属栏目:MySql教程 来源:波波说运维
导读:副标题#e# 概述 今天主要讲讲PG的数据结构,PG数据存储结构分为:逻辑结构和物理存储。 其中逻辑存储结构是内部的组织和管理数据的方式。物理存储结构是操作系统中组织和管理数据的方式。逻辑存储结构适用于不同的操作系统和硬件平台。 一、逻辑存储结构 逻

IAM的结构与GAM页类似,除IAM头外,剩下空间的每一位(bit)均对应着一个与IAM相关的Extent。若某bit位为1,则表明该bit位所关联的Extent已被分配给该IAM,反之未被分配。若一个IAM页面大小为8K,则除IAM头(64 bytes)外,一个IAM页面所能覆盖的文件范围是: (81024-64)8(88K),约4GB空间。

但与GAM也不同之处在于:IAM的出现位置不固定,只在在创建数据库对象的时候才分配。

超详细的PG数据存储结构--逻辑结构和物理存储总结,值得收藏

三、逻辑与物理存储关系

1、逻辑关系存在表空间;

2、表空间存在对应的数据文件中;

新创建的数据库对应的数据文件的名称:

Catalog表空间 – databasename.dbf

System表空间 – Udatabasename.dbf

Temp表空间-- Tdatabasename.dbf

  • 前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。
  • 不带 U 代表 是系统表的表空间,用于保存系统表的数据。
  • U 前缀的数据文件代表的表空间名为PG。
  • 不带U 的数据文件代表的表空间为 CATALOG。

四、数据库文件、表空间、其他文件之间的关系

1、关系图如下:

超详细的PG数据存储结构--逻辑结构和物理存储总结,值得收藏

说明:

1)每一个数据库具有一个或多个数据文件,用户存放数据库的所有数据。

2)数据库的数据文件有以下特征:

  • 一个数据库文件只能与一个数据库的一个表空间相连。
  • 一个表空间可以由多个数据文件组成。

3)数据库对象与文件关系:

  • 数据库对象放到表空间中。
  • 表空间有多个数据文件。
  • 表空间中有多个数据库对象。

4)数据库对象逻辑上是存储在表空间中,物理上是存储在与表空间相关联的数据文件中。

2、数据库包含的文件种类:

1)数据库文件:data/DB

数据库对象,如:数据库、表,索引,序列等对象。

2)控制文件:data/CTL

用来记录数据库集群的状态信息,如:版本信息、集群所管理的各种文件信息、检查点信息、事务状态信息等。

3)日志文件:data/REDOLOG

记录数据修改操作的日志,用于系统发生故障时进行数据恢复。

4)临时文件:data/DB

存放数据库进行计算的过程中,生成的各种中间对象,如排序运算的外存归并单元。

5)参数文件:data目录下

五、Postgresql 底层存储管理方式:

Postgresql的每个数据库均存放在一个目录中,以db_oid命名,该目录中存放每个表对应的文件,文件名以该数据表对应的relfilenode_oid命名。当表中的数据量足够大,导致表文件的大小大于1GB的时候,postgresql会自动创建新的文件用于存放新插入的数据。新文件的名称为: relfilenode_iod.1, relfilenode_iod.2 等。使用该策略是为了防止在某些文件系统中,最大支持文件尺寸不能大于1GB的情形。

db_oid, relfilenode_oid可以从pg_class系统表中查询得出。

每个table对应的文件内部又按照Page的方式组织。每个Page的大小默认为8KB。所以每个数据库对应文件的Disk 分布由下图所示:

超详细的PG数据存储结构--逻辑结构和物理存储总结,值得收藏

每个Page中包含Page Header以及Data段,Page Header中,pg_lower指向Free Space的起始地址,pg_upper指向Free Space的结束地址。

  • Data 段中,包含有: ItemIdData 段,Free Space段, Items段 以及Special space段。
  • ItemIdData 段: Array of (offset,length) pairs pointing to the actual items. 4 bytes per item.
  • Free Space 段:The unallocated space. New item pointers are allocated from the start of this area, new items from the end.
  • Items 段: The actual items themselves.
  • Special space 段: Index access method specific data. Different methods store different data. Empty in ordinary tables.
  • Item的存储是从pg_upper向pg_lower(类似堆)方向增长。ItenIdData的存储是从pg_lower向pg_upper方向增长(类似栈)。

【编辑推荐】

  1. 测试数据库的稳定性和性能竟如此简单
  2. 超详细的数据库主机及数据库日志收集总结
  3. 值得推荐的四款优秀图形数据库
  4. 后端程序员必备:MySQL数据库相关流程图/原理图
  5. 8月数据库排行:Oracle 节节攀升,PG 和 MongoDB 分数再现下跌
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读