PostgreSQL的核心架构

PostgreSQL的核心架构

注意 本人的博客都迁移到本人自己搭建的博客地址,通过此处可查看。

应用程序的访问接口

1. 访问接口总体图

访问接口总体图

进程及内存结构

1. 进程和内存结构图

进程和内存结构图

  • 主进程:Postmaster进程

  • 辅助进程:SysLogger(系统日志)进程、BgWriter(后台写)进程、WALWrite(预写式日志)进程、PgArch(归档)进程、AutoVacuum(系统自动清理)进程、PgStat(统计收集)进程、CheckPoint()进程。

2. 主进程 Postmaster

是整个数据库实例的总控进程,负责启动和关闭该数据库实例。

3. Syslogger(系统日志)进程

需要在Postgres.conflogging_collection设置为on,此时主进程才会启动Syslogger辅助进程。

4. BgWriter(后台)进程

把共享内存中的脏页写到磁盘上的进程。主要是为了提高插入、更新和删除数据的性能。

5. WalWrite(预写式日志)进程

WAL:Write Ahead Log(预写式日志)

在修改数据之前把修改操作记录到磁盘中,以便后面更新实时数据时就不需要数据持久化到文件中。

6. PgArch(归档)进程

WAL日志会被循环使用,PgArch在归档前会把WAL日志备份出来。通过PITY(Point in Time Recovery)技术,可以对数据库进行一次全量备份后,该技术将备份时间点之后的WAL日志通过归档进行备份,使用数据库的全量备份再加上后面产生的WAL日志,即可把数据库向前推到全量备份后的任意一个时间点。

7. AutoVacuum(自动清理)进程

在PostgreSQL数据库中,对表进行DELETE操作后,旧的数据并不会立即被删除,并且,在更新数据时,也并不会在旧的数据上做更新,而是新生成一行数据。旧的数据只是被标识为删除状态,只有在没有并发的其他事务读到这些就数据时,它们才会被清楚。这个清除工作就有AutoVacuum进程完成。

8. PgStat(统计数据收集)进程

做数据的统计收集工作。主要用于查询优化时的代价估算,包括一个表和索引进行了多少次的插入、更新、删除操作,磁盘块读写的次数、行的读次数。pg_statistic中存储了PgStat收集的各类信息。

9. 共享内存

PostgreSQL启动后,会生成一块共享内存,用于做数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和Clog缓冲区也存在共享内存中,除此之外还有全局信息比如进程、锁、全局统计等信息也保存在共享内存中。

使用"mmap()“方式的共享内存,使用此内存的好处是不在需要配置"System V"共享内存的参数"kernel.shmmax"和"kernel.shmall”,就能使用较大的共享内存。

10. 本地内存

非全局存储的数据都存在本地内存中,主要包括:

  • 临时缓冲区:用于访问临时表的缓冲区

  • work_mem: 内部排序操作和Hash表在使用临时操作文件之前使用的存储缓冲区。

  • manintance_work_mem: 在维护操作比如:VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN Key等中使用的内存缓冲区。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值