第 14 课 PostgreSQL 数据存储结构

2018-10-18  本文已影响67人  椟夜

PostgreSQL 数据存储结构分为:逻辑储存和物理存储

逻辑结构包括
  • 数据库在逻辑上分成多个存储单元,称作表空间。
  • 表空间用作把逻辑上相关的结构放在一起。
  • 数据库逻辑上是由一个或多个表空间组成。
  • 新创建的数据库默认创建下面的表空间:
  • Catalog表空间 存放系统表信息
  • System表空间 存放用户数据
  • Temp表空间
  • 自动创建的系统模式
  • PG_CATALOG
  • PG_LARGEOBJECT
  • PG_TOAST
  • PG_PARTITION
  • 默认的用户模式PUBLIC。
  1. 数据库对象-Database object
  • 模式对象
    表、索引、序列、大对象、视图、函数、存储过程、触发器、包 … …
  • 非模式对象
    用户、数据库
  1. 数据表-Table
  2. 索引-Index
  3. 序列-Sequence
  4. 视图-View
逻辑与物理存储关系
  1. 逻辑关系存在表空间;
  2. 表空间存在对应的数据文件中;
  3. 表空间是物理结构,同一表空间下可以有多个数据库;
  4. 数据库是逻辑结构,是表/索引/视图/存储过程的集合,一个数据库下可以有多个schema;
  5. 模式是逻辑结构,是对数据库的逻辑划分。
存储系统包括三个部分
  1. 内存中:buffer,MemoryContext;
  2. 数据文件,临时文件;
  3. 日志文件,日志缓存。
物理存储目录说明

位置:data/DB, 其中data是initdb时创建的目录,用户指定。


image.png
文件 用途 说明
GLOBAL.dbf 保存全局的系统表 pg_aud,pg_authid,pg_auth_members,pg_database, pg_event
SAMPLES.dbf 示例库
TEMPDB.dbf 保存临时文件 数据库运行过程中为排序,hash等操作而创建的临时文件
TEMPLATE0.dbf 模板库 调用initdb时复制该数据库创建其他数据库
TEMPLATE1.dbf 模板库 用户自己创建数据库时,复制该模板
TEMPLATE2.dbf 用于外部访问 保存全局的对外提供服务的数据对象
xxxxx.dbf 用户数据库 用户自己创建的
新创建的数据库对应的数据文件的名称
  • 前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。
  • 不带 U 代表 是系统表的表空间,用于保存系统表的数据。
  • U 前缀的数据文件代表的表空间名为PG。
  • 不带U 的数据文件代表的表空间为 CATALOG。
数据库文件、表空间、其他文件之间的关系图
image.png

上图说明:

  • 每一个数据库具有一个或多个数据文件,用户存放数据库的所有数据。
  • 数据库的数据文件有以下特征:

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

  • 数据库对象与文件关系:
  • 数据库对象放到表空间中。
  • 表空间有多个数据文件。
  • 表空间中有多个数据库对象。
  • 数据库对象逻辑上是存储在表空间中,物理上是存储在与表空间相关联的数据文件中。

数据库包含的文件种类:

  1. 数据库文件:data/DB
    数据库对象,如:数据库、表,索引,序列等对象。
  2. 控制文件:data/CTL
    用来记录数据库集群的状态信息,如:版本信息、集群所管理的各种文件信息、检查点信息、事务状态信息等。
  3. 日志文件:data/REDOLOG
    记录数据修改操作的日志,用于系统发生故障时进行数据恢复。
  4. 临时文件:data/DB
    存放数据库进行计算的过程中,生成的各种中间对象,如排序运算的外存归并单元。
  5. 参数文件:data目录下
数据文件结构
image.png
Page(页)
image.png

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

  1. 数据页面:数据页面是用来存储用户数据的。
  2. 控制页面:控制页面用来管理这些数据页面。

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

页面的寻址

Block(块)

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

Extent(区)

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

控制页面
PFS

Page Free Space,简称PFS页.

PFS_FREE:该页面已被物理分配,但尚未分配给任何数据对象或控制页;
PFS_DATA:该对象被分配作为数据页使用;
PFS_CTRL:该对象被分配作为控制页使用;

GAM

Global Allocation Map,简称GAM页。

IAM

Index Allocation Map,简称IAM页。

存储空间大小

实战操作

发现更多宝藏

我在喜马拉雅上分享声音

《PostgreSQL数据库内核分析》,点开链接可以听听,有点意思。

《数据库系统概论(第4版)》,点开链接可以听听,有点意思。

更多IT有声课程,点我发现更多

第 0 课 PostgreSQL 系列文章列表

其他相关文章分享列表:

第 23 课 PostgreSQL 创建自己的数据库、模式、用户
第 22 课 PostgreSQL 控制文件
第 21 课 PostgreSQL 日志系统
第 16 课 查询过程源码分析
第 15 课 PostgreSQL 系统参数配置
第 14 课 PostgreSQL 数据存储结构
第 13 课 PostgreSQL 存储之Page(页面)源码分析
第 12 课 PostgreSQL 认证方式
第 11 课 PostgreSQL 增加一个内核C函数
第 10 课 PostgreSQL 在内核增加一个配置参数
第 09 课 PostgreSQL 4种进程启动方式
第 08 课 PostgreSQL 事务介绍
第 07 课 PostgreSQL 数据库、模式、表、空间、用户间的关系
第 06 课 PostgreSQL 系统表介绍
第 05 课 PostgreSQL 编译源代码进行开发
第 04 课 PostgreSQL 安装最新的版本
第 03 课 PostgreSQL 代码结构
第 02 课 PostgreSQL 的特性、应用、安装
第 01 课 PostgreSQL 简介及发展历程

上面文章都在专辑中:PostgreSQL专辑链接,点我查看

如果有用,可以收藏这篇文件,随时在更新....

更多交流加群: PostgreSQL内核开发群 876673220

亲,记得点赞、留言、打赏额!!!

上一课
下一课

上一篇 下一篇

猜你喜欢

热点阅读