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

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

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

概述

今天主要讲讲PG的数据结构,PG数据存储结构分为:逻辑结构和物理存储。

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

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

一、逻辑存储结构

逻辑结构包括:

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

所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。

1、数据库集群-Database cluster

2、数据库-Database

3、表空间-tablespace

数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。

新创建的数据库默认创建下面的表空间:

1)Catalog表空间 存放系统表信息

2)System表空间 存放用户数据3)Temp表空间

4、模式-Schema

自动创建的系统模式如下:

1)PG_CATALOG

2)PG_LARGEOBJECT

3)PG_TOAST

4)PG_PARTITION

默认的用户模式PUBLIC。

5、段-segment

6、区-extent

7、块-block

8、数据库对象-Database object

1)模式对象表、索引、序列、大对象、视图、函数、存储过程、触发器、包 … …

2)非模式对象用户、数据库

9、数据表-Table

10、索引-Index

11、序列-Sequence

12、视图-View

二、物理存储结构

在执行initdb的时候会初始化一个目录,通常我们都会在系统配置相关的环境变量$PGDATA来表示,初始化完成后,会再这个目录生成相关的子目录以及一些文件。在postgresql中,tablespace的概念并不同于其他关系型数据库,这里一个tablespace对应的都是一个目录。如下图就是PG的物理结构:

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

1、存储系统主要包括三个部分:

内存中:buffer,MemoryContext;

数据文件,临时文件;

日志文件,日志缓存。

2、文件和目录相关作用描述:

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

3、数据文件结构

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

3.1、页

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

将数据文件中的空间从逻辑上划分成一个个页面(数据块)。页面是数据库I/O的基本单位,即只能整页读写数据文件, 页面的大小默认是8K。

页面可以分成两种:

1)数据页面:数据页面是用来存储用户数据的。

2)控制页面:控制页面用来管理这些数据页面。

数据库共享缓存中的空间划分也是按页为基本单位, 一个页的大小与数据文件中页的大小一致, 这样便于整页读取数据文件,并放入到数据库Buffer中, 从Buffer写入数据文件也同理,保证了缓存与数据文件结构和内容上的一致性。

3.2、Block(块)

概念上基本等同于Page, 但Block更多用于说明DMS中对数据文件中Page的描述。

例如: 对文件的读写的操作, 文件读写位置的定位, 数据文件空间回收等操作, 单位均是以块进行。

数据块的大小在系统初始化时指定,默认是8K,可以取值4K,8K,16K,32K。

3.3、Extent(区)

把数据文件中8个连续的Page构成的空间称为一个Extent。Extent是数据库进行数据文件空间分配/释放的基本单位。每个表、索引、序列对象都是由若干个区组成。数据文件被创建后,除自动保留部分区作为控制区外,其他区全部处于未分配状态。表、索引、序列对象的所有数据都存放在Extent中,当向这些Extent中插入数据时,若该Extent的所有页面都已占满,系统就会自动在所属表空间的数据文件中寻找一个尚未分配的区,并将其状态修改为数据区。

3.4、控制页面

用于空间管理的控制页面:PFS/GAM/IAM。

用于增量备份的控制页面:DCM。

判断可见性的控制页面:VM。

预留的控制页面:BCM/SGAM。

3.5、PFS

Page Free Space,简称PFS页.

用于记录本数据文件中页面的空间使用情况。对文件中的每个页面,PFS中都有一个“字节”与之对应,该字节记录了该页面的状态。

PFS页前64bytes被预留为页头, 剩下81024-64=8128一共覆盖81288K=64MB空间.

故PFS页每隔8128个页面出现一次, 系统初始化把第一个PFS页放在数据文件的第二个页面位置,即:第1号数据页面, 由此可知,第N个PFS页的位置在8128*N+1.

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

3.6、GAM

Global Allocation Map,简称GAM页。

功能:记录所在数据文件的Extent的分配情况,GAM页中除GAM头外,剩下空间的每一位(bit)均对应一个Extent的分配情况。若某bit位为1,则表明该bit位所关联的Extent已被分配出去,反之未被分配。

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

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

热点阅读