PostgreSQL07-体系结构(重点)

7.体系结构(重点)

psql体系结构

https://zhuanlan.zhihu.com/p/405687213

逻辑结构

数据库集簇( Database Cluster):它是指由单个 PostgreSQL 服务器实例管理的数据库集合。
组成数据库集簇的这些数据库使用相同的全局配置文件和监听端口,共用进程和内存结构。

Schema:可以理解为数据库中的命名空间,默认schema为public。是数据库的逻辑分隔
在一个客户端连接中可以切换不同的schema,不同schema中可以有同名的table,index,viewfunction

物理结构

9版本

base                       该目录对应pg_default表空间
golbal                     该目录对应pg_golbal表空间,存放集群中的共享对象例pg_database表,包含控制文件等
pg_log                     记录服务器状态的日志(包括错误、启停、慢查询、checkpoint过于频繁等)
pg_clog                    事务日志文件,记录事务的元数据,记录事务是否成功,不可随意删除
pg_xlog                                     记录wal日志,不可随意删除
pg_hba.conf                数据库访问控制文件

pg_multixact               共享行锁的事务状态数据
pg_notify                  异步消息相关的状态数据
pg_serial                  串行隔离级别的事务状态数据
pg_snapshots               存储了执行了事务snapshot导出的状态数据
pg_stat_tmp                统计信息的临时文件
pg_subtrans               子事务状态数据
pg_tablspc                表空间的软连接目录
pg_twophase               二阶事务状态数据

10版本

bae2ed14e972708618409f823cfa1013.png

25b2c34442eea5016251f14c7f2edd1f.png

OID

对象标识符,它是数据库对象的唯一标识,所有数据库对象(数据库本身、表、索引、视图、函数等)各自对应一个OID。

其中pg_database保存数据库本身对象的OID,pg_class保存表、索引和序列等对象的OID。

表空间

PG中最大的逻辑存储单位,数据库中创建的对象都保存在表空间中

通过表空间来规划数据的存放位置

默认表空间为pg_defaultpg_global

pg_global  物理位置为global目录,用来保存系统表

pg_default 物理位置为base目录,是template0和template1的默认表空间,创建数据库时,默认从template1数据库进行克隆

自定义表空间

mkdir -p /pgdata/10/my_table_space                  创建物理目录
create tablespace myspc location '/pgdata/10/my_table_space';   创建表空间并指定物理目录
create table my_table(id serial primary key, name int) tablespace myspc;        创建表并指定表空间

数据文件命名

新创建的表文件以OID命名,大小超1G,OID.顺序号

真正管理表文件的是pg_calss表中的relfilenode字段的值

表文件内部结构

保存在磁盘中的块称为page

保存在内存中的块称为buffer

表和索引称为relation

行称为tuple

读写以page为最小单位,默认8K

d7b806c6d0dcf9cc958342192a7df58d.png


进程结构

守护进程     postmaster

命令行接口  CLI

830ee46fd9f264be44a90a79bd4984ef.png

辅助进程

background writer:也称bgwriter,通常处于休眠状态,每次唤醒后它会搜索共享缓冲池找到被修改的页,并将它们从共享缓冲池刷出
autovacuum launcher:自动清理回收垃圾进程
WALwriter:定期将 WAL 缓冲区上的 WAL 数据写入磁盘
statistics collector:统计信息收集进程
logging collector:日志进程,将消息或错误信息写入日志
archiver:WAL归档进程
checkpointer:检查点进程

c6be1cec79c1151a3b31ecf0f7a6e073.png


内存结构

本地内存

本地内存由每个后端服务进程分配以供自己使用,当后端服务进程被fork时,每个后端进程为查询分配一个本地内存区域。
本地内存由三部分组成:
work mem :当使用order bydistinct操作对元组进行排序时会使用这部分内存
maintenance work mem : 维护操作,例如 VACUUM 、 REINDEX 、 CREATE INDEX等操作使用这部分内存
temp_buffers :临时表相关操作使用这部分内存

共享内存

共享内存在 PostgreSQL 服务器启动时分配,由所有后端进程共同使用
共享内存主要由三部分组成 :
shared buffer pool : PostgreSQL 将表和索引中的页面从持久存储装载到这里,并直接操作它们
WAL buffer: WAL文件持久化之前的缓冲区
CommitLog buffer : PostgreSQL在Commit Log中保存事务的状态,并将这些状态保留在共享内存缓冲区中,在整个事务处理过程中使用

b36db87b2bb4c15b8a836b8754a5acce.png

posted @   立勋  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示