PostgreSQL07-体系结构(重点)
7.体系结构(重点)
psql体系结构
https://zhuanlan.zhihu.com/p/405687213
逻辑结构
数据库集簇( Database Cluster):它是指由单个 PostgreSQL 服务器实例管理的数据库集合。
组成数据库集簇的这些数据库使用相同的全局配置文件和监听端口,共用进程和内存结构。
Schema:可以理解为数据库中的命名空间,默认schema为public。是数据库的逻辑分隔
在一个客户端连接中可以切换不同的schema,不同schema中可以有同名的table,index,view,function
物理结构
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版本
OID
对象标识符,它是数据库对象的唯一标识,所有数据库对象(数据库本身、表、索引、视图、函数等)各自对应一个OID。
其中pg_database保存数据库本身对象的OID,pg_class保存表、索引和序列等对象的OID。
表空间
PG中最大的逻辑存储单位,数据库中创建的对象都保存在表空间中
通过表空间来规划数据的存放位置
默认表空间为pg_default和pg_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
进程结构
守护进程 postmaster
命令行接口 CLI
辅助进程
background writer:也称bgwriter,通常处于休眠状态,每次唤醒后它会搜索共享缓冲池找到被修改的页,并将它们从共享缓冲池刷出
autovacuum launcher:自动清理回收垃圾进程
WALwriter:定期将 WAL 缓冲区上的 WAL 数据写入磁盘
statistics collector:统计信息收集进程
logging collector:日志进程,将消息或错误信息写入日志
archiver:WAL归档进程
checkpointer:检查点进程
内存结构
本地内存
本地内存由每个后端服务进程分配以供自己使用,当后端服务进程被fork时,每个后端进程为查询分配一个本地内存区域。
本地内存由三部分组成:
work mem :当使用order by或distinct操作对元组进行排序时会使用这部分内存
maintenance work mem : 维护操作,例如 VACUUM 、 REINDEX 、 CREATE INDEX等操作使用这部分内存
temp_buffers :临时表相关操作使用这部分内存
共享内存
共享内存在 PostgreSQL 服务器启动时分配,由所有后端进程共同使用
共享内存主要由三部分组成 :
shared buffer pool : PostgreSQL 将表和索引中的页面从持久存储装载到这里,并直接操作它们
WAL buffer: WAL文件持久化之前的缓冲区
CommitLog buffer : PostgreSQL在Commit Log中保存事务的状态,并将这些状态保留在共享内存缓冲区中,在整个事务处理过程中使用
分类:
PostgreSQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)