PostgreSQL 数据存储结构

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

  • 逻辑存储结构是KingbaseES内部的组织和管理数据的方式。
  • 物理存储结构是操作系统中组织和管理数据的方式。
  • 逻辑存储结构适用于不同的操作系统和硬件平台。
  • 逻辑存储结构和物理存储结构是分别进行管理。
逻辑结构包括
  • 数据库集群-Database cluster
  • 数据库-Database
  • 表空间-tablespace

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

    • Catalog表空间 存放系统表信息
    • System表空间 存放用户数据
    • Temp表空间
  • 模式-Schema

    • 自动创建的系统模式

    • PG_CATALOG
    • PG_LARGEOBJECT
    • PG_TOAST
    • PG_PARTITION
    • 默认的用户模式PUBLIC。
  • 段-segment
  • 区-extent
  • 块-block

    1. 数据库对象-Database object

    • 模式对象
      表、索引、序列、大对象、视图、函数、存储过程、触发器、包 … …
    • 非模式对象
      用户、数据库
    • 数据表-Table
    • 索引-Index
    • 序列-Sequence
    • 视图-View
  • 逻辑与物理存储关系
    1. 逻辑关系存在表空间;
    2. 表空间存在对应的数据文件中;
    存储系统包括三个部分
    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 用户数据库 用户自己创建的
    新创建的数据库对应的数据文件的名称
    • Catalog表空间 – databasename.dbf
    • System表空间 – Udatabasename.dbf
    • Temp表空间– Tdatabasename.dbf
    • 前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。
    • 不带 U 代表 是系统表的表空间,用于保存系统表的数据。
    • U 前缀的数据文件代表的表空间名为PG。
    • 不带U 的数据文件代表的表空间为 CATALOG。
    数据库文件、表空间、其他文件之间的关系图

    image.png

    扫描二维码关注公众号,回复: 2702419 查看本文章

    上图说明:


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

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

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

    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写入数据文件也同理,保证了缓存与数据文件结构和内容上的一致性。

    页面的寻址
    - 数据页面是由一个Uint32的变量寻址。前 11 位表示 fileid, 后 21 位表示文件内偏移。

    Block(块)

    概念上基本等同于Page, 但Block更多用于说明DMS中对数据文件中Page的描述。
    - 例如: 对文件的读写的操作, 文件读写位置的定位, 数据文件空间回收等操作, 单位均是以块进行。
    - 数据块的大小在系统初始化时指定,默认是8K,可以取值4K,8K,16K,32K。

    Extent(区)

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

    控制页面
    • 用于空间管理的控制页面:PFS/GAM/IAM。
    • 用于增量备份的控制页面:DCM。
    • 判断可见性的控制页面:VM。
    • 预留的控制页面:BCM/SGAM。
    PFS

    Page Free Space,简称PFS页.
    - 功能:用于记录本数据文件中页面的空间使用情况。对文件中的每个页面,PFS中都有一个“字节”与之对应,该字节记录了该页面的状态。
    - 每个页面可能有三种状态 :

    PFS_FREE:该页面已被物理分配,但尚未分配给任何数据对象或控制页;
    PFS_DATA:该对象被分配作为数据页使用;
    PFS_CTRL:该对象被分配作为控制页使用;
    - PFS页前64bytes被预留为页头, 剩下8*1024-64=8128一共覆盖8128*8K=64MB空间.
    故PFS页每隔8128个页面出现一次, 系统初始化把第一个PFS页放在数据文件的第二个页面位置,即:第1号数据页面, 由此可知,第N个PFS页的位置在8128*N+1.
    image.png

    GAM

    Global Allocation Map,简称GAM页。
    - 功能:记录所在数据文件的Extent的分配情况,GAM页中除GAM头外,剩下空间的每一位(bit)均对应一个Extent的分配情况。若某bit位为1,则表明该bit位所关联的Extent已被分配出去,反之未被分配。
    - 若一个GAM页面大小为8K,则除GAM头(64 bytes)外,一个GAM页面所能覆盖的文件范围是: (8*1024-64)8(8*8K),约4GB空间。此外,GAM页每隔8*8128*8个页面出现一个,系统要求第一个GAM页出现在文件的第3个页面位置(即:第2个索引位置),由此得知,第N个GAM页的出现位置是: 8*8128*8*N+2
    image.png

    IAM

    Index Allocation Map,简称IAM页。
    - 功能:每个IAM页只隶属于一个数据库对象(例如:表),但一个数据库对象可包含多个IAM页,由此可见IAM页与数据库对象的关系是1对1,而数据库对象与IAM页的关系是1对多.
    - IAM的结构与GAM页类似,除IAM头外,剩下空间的每一位(bit)均对应着一个与IAM相关的Extent。若某bit位为1,则表明该bit位所关联的Extent已被分配给该IAM,反之未被分配。若一个IAM页面大小为8K,则除IAM头(64 bytes)外,一个IAM页面所能覆盖的文件范围是: (8*1024-64)8(8*8K),约4GB空间。但与GAM也不同之处在于:IAM的出现位置不固定,只在在创建数据库对象的时候才分配。
    image.png

    存储空间大小
    • 数据页大小:默认为8K (可支持4K, 8K, 16K, 32K)。
    • 最大存储容量:单个数据库(集群)最大容量为32TB。
    • 数据文件的最大尺寸:单个数据文件最大尺寸16GB。
    • 数据文件最大个数:单个数据库(集群)最多支持2048个数据文件。

    实战操作

    • 查询所有数据和临时文件信息
      SELECT * FROM PG_ALLDATAFILES;
    • 查询当前数据库的数据和临时文件信息
      SELECT * FROM PG_DATAFILES;
    • 查询数据和临时文件的空闲空间信息
      SELECT * FROM PG_FREESPACES;

    猜你喜欢

    转载自blog.csdn.net/tencupofkaiwater/article/details/81069210