数据库修仙炼气篇一——postgresql架构

本文详细介绍了PostgreSQL数据库的架构,包括C/S模式、前端与后端交互、后端进程如postgres主进程、子进程及其职责。重点阐述了后端处理流程,如接收查询、解析、分析、优化和执行的过程,以及数据库初始化、wal日志管理和流复制机制。

postgresql架构

整体模式

postgresql采用C/S架构(客户端/服务端)模式。应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信。

postgresql把客户端称为前端,把服务端称为后端。前端通过调用libpq来与后端通信。
后端由多个进程组成,前端发送网络数据报文(查询请求)到后端,后端解析请求后回复相应的报文。

postgresql后端进程

  • postgres主进程(postmaster)

管理后端的常驻进程,也称为’postmaster’。
其默认监听UNIX Domain Socket和TCP/IP(Windows等,一部分的平台只监听tcp/ip)的5432端口,等待来自前端的的连接处理。
监听的端口号可以在PostgreSQL的设置文件postgresql.conf里面可以改。

当有前端连接过来的时候,postmaster会fork一个子进程来处理前端的连接请求。并通过共享内存进行进程间通信。

  • postgres子进程

子进程根据pg_hba.conf定义的安全策略来判断是否允许进行连接,根据策略,会拒绝某些特定的IP及网络,或者也可以只允许某些特定的用户或者对某些数据库进行连接。

  • 辅助进程

    • writer process
    • WAL wriiter process
    • archive process
    • stats collector process
    • logger process
    • autovacuum
    • wal sender/wal receiver

启动流程

main
PostmasterMain
SysLogger_Start
fork_process
InitPostmasterChild
SysLoggerMain
maybe_start_bgworkers
ServerLoop
StartAutoVacLauncher
MaybeStartWalReceiver
StartCheckpointer
StartBackgroundWriter

后端处理流程

  1. 接收前端发送过来的请求报文
  2. parse模块进行文本解析,得到查询树
  3. analyze模块进行分析处理
  4. 通过查询语句的重写实现视图和规则
  5. 查询优化,优化查询树
  6. executor执行处理
  7. 返回执行结果给前端
  8. 重复步骤1-7

后端运行主要逻辑

  1. initdb初始化一个数据库,创建data目录、模板数据库、默认用户、默认配置文件,主要涉及内容如下:
  • pg_wal:存放wal日志

  • base:存放表数据

  1. postgresql采用先写wal日志,再写数据的方式;通过保证wal数据库写入的方式来保证数据写入,并通过wal日志可以进行数据redo和undo;

  2. initdb初始化数据目录后,可以通过pg_ctl启动后端服务进程;

  3. 后端服务进程首先是启动了一个postgres进程,该进程会fork出startup、logger、bgwriter、walwriter、walreceiver等子进程,并通过共享内存和信号进行通信,同时该进程还会监听配置的ip和端口;

  4. postgres进程启动后会先启动startup进程,startup进程会读取control文件,确认是否需要恢复,即是否还有wal日志还没有转换为数据,若有或者配置recovery,则需要根据对应的control信息和检查点信息,找到离检查点或配置的最近的lsn,再根据lsn找到对应wal日志进程redo;

  5. redo完成后,若开启了流复制,则startup进程将唤醒walreceiver进程,walreceiver获取到最新的lsn后,将和主库walsender进程进行wal同步;

  6. postgres启动walreceiver进程时,walreceiver会和另外一个postgres服务端建立连接,另一端将会启动一个walsender进程来进行流复制同步;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值