searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

PostgreSQL源码目录与进程结构

2023-09-15 01:16:57
30
0

     一、src/backend 源码目录梳理

目录文件 说明
access/ 各种存储访问方法(在各个子目录下) common(共同函数)、gin (Generalized Inverted Index通用逆向索引)、gist (Generalized Search Tree通用索引)、 hash (哈希索引)、heap (heap的访问方法)、index (通用索引函数)、 nbtree (Btree函数)、transam (事务处理)
bootstrap/ 数据库的初始化处理(initdb的时候)
catalog/ 系统目录
commands/ 执行非计划查询的SQL命令,如创建表命令等。
executor/ 执行器,执行来自Optimizer的查询计划。
foreign/ FDW(Foreign Data Wrapper)处理
lib/ 共同函数
libpq/ 前端/后端通信处理
main/ 主程序模块,它负责将控制权转到Postmaster进程或Postgres进程。
nodes/ 表达式树节点相关的处理函数
optimizer/ 优化器,根据查询树创建最优的查询路径和查询计划。
parser/ 编译器,将SQL查询转化为内部查询树。
port/ 平台兼容性处理相关的函数。
postmaster/ 监听用户请求的守护进程,并控制Postgres进程的启动和终止。
replication/ 流复制
regex/ 正规表达式库及相关函数,用于支持正规表达式处理。
rewrite/ 规则及视图相关的重写处理
snowball/ 全文检索相关(语干处理)
storage/ 共享内存、磁盘上的存储、缓存等全部一次/二次记录管理(以下的目录)buffer/(缓存管理)、 file/(文件)、freespace/(Fee Space Map管理) ipc/(进程间通信)、large_object /(大对象的访问函数)、lmgr/(锁管理)、page/(页面访问相关函数)、 smgr/(存储管理器)
tcop/ Postgres服务进程的主要处理部分,它调用Parser、Optimizer、Executor和Commands中的函数来执行客户端提交的查询
tsearch/ 全文检索
utils/ 各种模块(以下目录) adt/(嵌入的数据类型)、cache/(缓存管理)、 error/(错误处理)、fmgr/(函数管理)、hash/(hash函数)、 init/(数据库初始化、postgres的初期处理)、 mb/(多字节文字处理)、misc/(其他)、mmgr/(内存的管理函数)、 resowner/(查询处理中的数据(buffer pin及表锁)的管理)、sort/(排序处理)、time/(事务的 MVCC 管理)

二、进程结构

1. 守护进程Postmaster

进程作用

负责PG的启动和关闭;监听和接收客户端连接请求,为其派生服务进程Postgres,管理数据库运行相关的辅助进程。

  • 数据库的启停

  • 监听客户端连接

  • 为每个客户端连接fork单独的postgres服务进程

  • 当服务进程出错时进行修复

  • 管理数据文件

  • 管理数据库运行相关的辅助进程

2. 服务进程Postgres

进程作用

  • 直接与客户端进程通讯

  • 负责接收客户端所有的请求

  • 包含数据库引擎,负责解析SQL和生成执行计划等

  • 根据命令的需要调用各中辅助进程和访问各内存结构

  • 负责返回命令执行结果给客户端

  • 在客户端断开连接时释放进程

3. 辅助进程(后台进程)

进程名 作用 进程相互关系 启动函数 / 工作函数 配置项
logger 维护日志信息输出 循环监听Postmaster调用SysLogger_Start启动 SysLogger_Start / SysLoggerMain 设置开启logging_collector
checkpointer 处理检查点,将检查点前的脏页刷到磁盘 循环监听时根据触发时机(如shutdown)由Postmaster中StartChildProcess启动,会触发bg writerwalwriter StartCheckpointer / CheckpointerMain 设置周期checkpoint_timeout
background writer 将共享缓冲池(shared buffer)的脏页刷到硬盘 循环监听时由Postmaster中StartChildProcess启动,会受checkpoint触发 StartBackgroundWriter / BackgroundWriterMain 设置周期bgwriter_delay
walwriter 周期性将wal缓冲区的wal数据刷到硬盘 循环监听时由Postmaster中StartChildProcess启动,会受checkpoint触发 StartWalWriter / WalWriterMain 设置开启fsync
autovacuum 周期性自动清理数据库,回收空间,包括Launcher监控,Worker执行清理 循环监听时由Postmaster调用StartAutoVacLauncher启动,元组的数目从stats collector获取 StartAutoVacLauncher / AutoVacLauncherMain 设置开启autovacuum
archiver 将日志归档 循环监听时由Postmaster调用pgarch_start启动 pgarch_start / PgArchiverMain 设置开启archive_mode
stats collector 收集统计信息,用于pg_stat_activity等视图 循环监听时由Postmaster调用pgstat _start启动,收集到的信息能被autovaccum利用 pgstat_start / PgstatCollectorMain 设置开启track_activities
logical replication launcher 启动逻辑复制 循环监听Postmaster调用ApplyLauncherRegister启动(比其他后端进程早) ApplyLauncherRegister / ApplyLauncherMain 设置模式 wal_level=‘logical’

4. 复制相关进程

a. 预写式日志发送进程 wal sender

进程作用:主机通过网络传送WAL日志,和wal receiver进程合作实现流复制。

当流传输时,walsender保持从磁盘读取XLOG记录,并通过COPY 协议将他们发送到备用服务器,直到两端通过退出COPY模式结束复制或直接关闭连接。

b. 预写式日志接受进程 wal receiver

进程作用:备机通过网络接收WAL日志,和wal sender进程合作实现流复制。备机在接收到WAL日志后,在自身的数据库上还原,生成和主机一样的数据库。

c. 启动进程 startup

进程作用:主库在做完xlog归档模式恢复之后就把startup退了,正常启动。而备机不会退startup,持续等待、读取日志。

0条评论
0 / 1000
g****n
4文章数
1粉丝数
g****n
4 文章 | 1 粉丝
原创

PostgreSQL源码目录与进程结构

2023-09-15 01:16:57
30
0

     一、src/backend 源码目录梳理

目录文件 说明
access/ 各种存储访问方法(在各个子目录下) common(共同函数)、gin (Generalized Inverted Index通用逆向索引)、gist (Generalized Search Tree通用索引)、 hash (哈希索引)、heap (heap的访问方法)、index (通用索引函数)、 nbtree (Btree函数)、transam (事务处理)
bootstrap/ 数据库的初始化处理(initdb的时候)
catalog/ 系统目录
commands/ 执行非计划查询的SQL命令,如创建表命令等。
executor/ 执行器,执行来自Optimizer的查询计划。
foreign/ FDW(Foreign Data Wrapper)处理
lib/ 共同函数
libpq/ 前端/后端通信处理
main/ 主程序模块,它负责将控制权转到Postmaster进程或Postgres进程。
nodes/ 表达式树节点相关的处理函数
optimizer/ 优化器,根据查询树创建最优的查询路径和查询计划。
parser/ 编译器,将SQL查询转化为内部查询树。
port/ 平台兼容性处理相关的函数。
postmaster/ 监听用户请求的守护进程,并控制Postgres进程的启动和终止。
replication/ 流复制
regex/ 正规表达式库及相关函数,用于支持正规表达式处理。
rewrite/ 规则及视图相关的重写处理
snowball/ 全文检索相关(语干处理)
storage/ 共享内存、磁盘上的存储、缓存等全部一次/二次记录管理(以下的目录)buffer/(缓存管理)、 file/(文件)、freespace/(Fee Space Map管理) ipc/(进程间通信)、large_object /(大对象的访问函数)、lmgr/(锁管理)、page/(页面访问相关函数)、 smgr/(存储管理器)
tcop/ Postgres服务进程的主要处理部分,它调用Parser、Optimizer、Executor和Commands中的函数来执行客户端提交的查询
tsearch/ 全文检索
utils/ 各种模块(以下目录) adt/(嵌入的数据类型)、cache/(缓存管理)、 error/(错误处理)、fmgr/(函数管理)、hash/(hash函数)、 init/(数据库初始化、postgres的初期处理)、 mb/(多字节文字处理)、misc/(其他)、mmgr/(内存的管理函数)、 resowner/(查询处理中的数据(buffer pin及表锁)的管理)、sort/(排序处理)、time/(事务的 MVCC 管理)

二、进程结构

1. 守护进程Postmaster

进程作用

负责PG的启动和关闭;监听和接收客户端连接请求,为其派生服务进程Postgres,管理数据库运行相关的辅助进程。

  • 数据库的启停

  • 监听客户端连接

  • 为每个客户端连接fork单独的postgres服务进程

  • 当服务进程出错时进行修复

  • 管理数据文件

  • 管理数据库运行相关的辅助进程

2. 服务进程Postgres

进程作用

  • 直接与客户端进程通讯

  • 负责接收客户端所有的请求

  • 包含数据库引擎,负责解析SQL和生成执行计划等

  • 根据命令的需要调用各中辅助进程和访问各内存结构

  • 负责返回命令执行结果给客户端

  • 在客户端断开连接时释放进程

3. 辅助进程(后台进程)

进程名 作用 进程相互关系 启动函数 / 工作函数 配置项
logger 维护日志信息输出 循环监听Postmaster调用SysLogger_Start启动 SysLogger_Start / SysLoggerMain 设置开启logging_collector
checkpointer 处理检查点,将检查点前的脏页刷到磁盘 循环监听时根据触发时机(如shutdown)由Postmaster中StartChildProcess启动,会触发bg writerwalwriter StartCheckpointer / CheckpointerMain 设置周期checkpoint_timeout
background writer 将共享缓冲池(shared buffer)的脏页刷到硬盘 循环监听时由Postmaster中StartChildProcess启动,会受checkpoint触发 StartBackgroundWriter / BackgroundWriterMain 设置周期bgwriter_delay
walwriter 周期性将wal缓冲区的wal数据刷到硬盘 循环监听时由Postmaster中StartChildProcess启动,会受checkpoint触发 StartWalWriter / WalWriterMain 设置开启fsync
autovacuum 周期性自动清理数据库,回收空间,包括Launcher监控,Worker执行清理 循环监听时由Postmaster调用StartAutoVacLauncher启动,元组的数目从stats collector获取 StartAutoVacLauncher / AutoVacLauncherMain 设置开启autovacuum
archiver 将日志归档 循环监听时由Postmaster调用pgarch_start启动 pgarch_start / PgArchiverMain 设置开启archive_mode
stats collector 收集统计信息,用于pg_stat_activity等视图 循环监听时由Postmaster调用pgstat _start启动,收集到的信息能被autovaccum利用 pgstat_start / PgstatCollectorMain 设置开启track_activities
logical replication launcher 启动逻辑复制 循环监听Postmaster调用ApplyLauncherRegister启动(比其他后端进程早) ApplyLauncherRegister / ApplyLauncherMain 设置模式 wal_level=‘logical’

4. 复制相关进程

a. 预写式日志发送进程 wal sender

进程作用:主机通过网络传送WAL日志,和wal receiver进程合作实现流复制。

当流传输时,walsender保持从磁盘读取XLOG记录,并通过COPY 协议将他们发送到备用服务器,直到两端通过退出COPY模式结束复制或直接关闭连接。

b. 预写式日志接受进程 wal receiver

进程作用:备机通过网络接收WAL日志,和wal sender进程合作实现流复制。备机在接收到WAL日志后,在自身的数据库上还原,生成和主机一样的数据库。

c. 启动进程 startup

进程作用:主库在做完xlog归档模式恢复之后就把startup退了,正常启动。而备机不会退startup,持续等待、读取日志。

文章来自个人专栏
pg数据库探索
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
0