PG的物理结构

本文深入探讨了PostgreSQL的物理结构,包括数据库集簇、目录结构、文件系统布局、表空间管理、数据文件组织及内部结构。揭示了PG如何高效存储和管理数据,适合数据库管理员和技术爱好者深入了解。

PG的物理结构

http://ke.sandata.com.cn/course/26/task/379/show

1 数据库的体系架构分解

PostgreSQL体系架构之物理结构
Oracle
mysql
Greenplum
redis
体系架构:
逻辑结构
物理结构
进程结构
内存结构
PG的物理结构:
ORACLE的物理结构:
相关的问题(参数文件 控制文件 密码文件 数据文件|数据 UNDO TEMP REDO)

2 PG的物理结构

本质上都是PG的相关一些文件

  1. DATABASE CLUSTER 数据库集簇–多个数据库的集合
  2. BASE目录(包含一系列子目录和文件)

在这里插入图片描述

-bash-4.2$ tree -L 1 -d /pgdata/10/data
/pgdata/10/data                       --数据目录
├── base                              --表和索引文件存放目录
├── global                            --影响全局的系统表存放目录
├── pg_commit_ts                      --事务提交时间戳数据存放目录
├── pg_dynshmem                       --被动态共享所使用的文件存放目录
├── pg_logical                        --用于逻辑复制的状态数据
├── pg_multixact                      --多事务状态的数据
├── pg_notify                         --LISTEN/NOTIFY状态的数据
├── pg_replslot                       --复制槽数据存放目录
├── pg_serial                         --已提交的可序列化信息存放目录
├── pg_snapshots                      --快照
├── pg_stat                           --统计信息
├── pg_stat_tmp                       --统计信息子系统临时文件
├── pg_subtrans                       --子事务状态数据
├── pg_tblspc                         --表空间
├── pg_twophase                       --预备事务状态文件
├── pg_wal                            --事务日志(预写日志)
└── pg_xact                           --日志提交状态的数据存放目录


文件和目录相关作用描述

files description
PG_VERSION 包含postgresql主版本号的文件
pg_hba.conf 控制postgresql客户端验证的文件
pg_ident.conf 控制postgresql用户名映射的文件
postgresql.conf 配置参数文件
postgresql.auto.conf 用于存储在ALTER SYSTEM(版本9.4或更高版本)中设置的配置参数的文件
postmaster.opts 记录服务端上一次启动的命令行选项
subdirectories description
base/ 包含每个数据库子目录的子目录
global/ 包含群集范围表的子目录,例如pg_database和pg_control
pg_commit_ts/ 包含事务提交时间戳数据的子目录。 9.5版本以后
pg_clog/ (Version 9.6 or earlier) 包含事务提交状态数据的子目录。它在版本10中重命名为pg_xact. CLOG将在5.4章节中详解。.
pg_dynshmem/ 包含动态共享内存子系统使用的文件的子目录。9.4版本以后
pg_logical/ 包含逻辑解码的状态数据的子目录。9.4版本以后
pg_multixact/ 包含多事务状态数据的子目录(用于 shared row locks)
pg_notify/ 包含LISTEN / NOTIFY状态数据的子目录
pg_repslot/ 包含复制槽数据的子目录(9.1版本以后)
pg_serial/ 包含有关已提交的序列化事务(9.1版本以后)信息的子目录
pg_snapshots/ 包含导出快照的子目录(9.2版本以后)。 PostgreSQL的函数pg_export_snapshot在此子目录中创建快照信息文件
pg_stat/ 包含统计子系统永久文件的子目录
pg_stat_tmp/ 包含统计子系统临时文件的子目录
pg_subtrans/ 包含子事物状态数据的子目录
pg_tblspc/ 表空间符号链接目录
pg_twophase/ 包含prepare事务的状态文件
pg_wal/ (Version 10 or later) 包含WAL(Write Ahead Logging)段文件的子目录。在版本10中从pg_xlog重命名而来.
pg_xact/ (Version 10 or later) 包含事务提交状态数据的子目录。在版本10中从pg_clog重命名而来.CLOG将在5.4章节中详解
pg_xlog/ (Version 9.6 or earlier) 包含WAL(Write Ahead Logging)段文件的子目录。在版本10中重命名为pg_

重要一些文件

pg_hba.conf 控制PG客户端认证文件
主机 数据库 用户 ip地址 认证方式
pg_ident.conf 控制PG用户名映射的文件
配置操作系统用户和数据库服务器上的用户映射
postgresql.conf 控制PG数据库的参数文件
PG_VERSION 存放PG的主版本号的文件
postgresql.auto.conf 存储使用alter system 修改的配置文件(9.4以后)
postmaster.opts 记录服务器上一次启动的命令行选项
postmaster.pid 伴随数据库服务一起启动,数据数据库进程编号,PGDATA端口等

在这里插入图片描述

数据库有两个基础的对象 一个是oid,一个是表空间。
oid是数据库对象的标识。
表空间实际上是文件系统中的一个位置链接,即一个目录,它是一个逻辑上的概念,目录是它的物理存在方式。数据库中创建的对象(表、索引、数据库对象)都保存在表空间中。postgresql初始化完成后,会有两个默认的表空间,一个是pg_default,如果用户建表时没有指定表空间,所有新建的表都会放在pg_default中,另一个是pg_global,存放的是整个实例数据库所共享的系统表。

在这里插入图片描述

2.1 base的物理布局设计

每个数据库都会在$PGDATA/base下面生成一个子目录,如下图,都会一一对应。

[root@yanwei base]# ls -ltr
total 48
drwx------. 2 postgre postgre 8192 Jan 28  2019 13211
drwx------. 2 postgre postgre 8192 May 12 23:07 13212
drwx------. 2 postgre postgre 8192 May 12 23:07 1
drwx------  2 postgre postgre 8192 May 12 23:07 16387


postgre=# select datname,oid from pg_database; 
  datname  |  oid  
-----------+-------
 postgres  | 13212
 postgre   | 16387
 template1 |     1
 template0 | 13211
(4 rows)

表空间跟数据库关系
在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
在PostgreSQL集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。

系统自带表空间
表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录 P A D A T A / b a s e / 表 空 间 p g g l o b a l 用 来 存 放 系 统 字 典 表 ; 对 应 存 储 目 录 PADATA/base/ 表空间pg_global用来存放系统字典表;对应存储目录 PADATA/base/pgglobalPADATA/global/

2.2 表和索引的物理布局设计

每一个表和索引如果不超过1G大小,都只有一个文件。表和索引也有和数据库一样的OID,另外还有一个relfilenode,这个值不会总是匹配OID,在发生一truncate,reindex,cluster等相关的操作,会发生变化,见如下示例:

可以看到开始oid和relfilenode是一样的,truncate后,relfilenode发生了变化.

[postgre@yanwei 24581
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值