2021SC@SDUSC
分工情况
由官方的文档,可以知道postgreSQL的主要架构和上面的图片描述的一样。 所以我们组将核心源码的分析工作分成两部分,一部分负责postmaster,也就是守护进程;另一部分负责postgres,也就是服务进程。
我负责的部分
我和另一名组员负责postmaster部分。postmaster对于postgresql来说就像一个总控制台,一旦开启一个数据库实例(pg_ctl start),postmaster进程就开始运行。它的主要功能如下:
- 负责整个系统的启动和关闭。
- 在服务进程出现错误时完成系统的恢复。
- 管理数据库文件。
- 监听并接收来自客户端的连接请求,并为客户端fork一个postgres服务进程,代替客户端在数据库上执行各种命令。
- 管理与数据库运行相关的辅助进程。
- writer process 在适当的时间点把共享内存上的缓存写往磁盘。
- WAL writer process 把共享内存上的WAL缓存在适当的时间点往磁盘写。
- Archive process 把WAL日志转移到归档日志里。
- stats collector process 统计信息的收集进程。
- Logger process 把postgresql的活动状态写到日志信息文件(并非事务日志),在指定的时间间隔里面,对日志文件进行rotate。
- autovacuum launcher process是依赖于postmaster间接启动vacuum进程。从而实现自动回收空间和统计信息。
从功能上看,postmaster的作用是非常核心的,它对整个DBMS系统的正常运行至关重要。我们分析的重点会放在一些核心的指令,数据库文件的管理、部分辅助进程上。
主要源码
我们要分析的主要源码集中在src文件夹(存放源码的文件夹)中的这三个文件夹中。
- backend文件夹就是存放postmaster和postgres相关源码的文件夹。
- bin文件夹存放的是实现UNIX指令的源码。
- interfaces文件夹存放的是前端和后端实现通信的源码。
而backend文件夹里也有很多文件夹,我可能会分析到的有 - postmaster文件夹,包含postmaster源码以及各种辅助进程的源码;
- libpq文件夹,包含前后端通信的源码;
- storage文件夹,涉及到共享内存的实现、磁盘上的存储、缓存以及记录等源码。
经过初步了解,将代码的分析范围划定到了这几个文件夹里,还无法定位到具体的代码文件,这需要以后的分析里,通过函数以及文件的调用,逐个定位具体文件,具体的代码。
分析方式
由于postmaster所处理的异常情况不太容易出现,因此大部分源码的分析都只能依靠直接阅读。部分方便调试的会使用gdb进行调试,从而简化源码的分析。
|