微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgreSQL源码分析综述

2021SC@SDUSC

目录

分工情况

pg的核心架构

由官方的文档,可以知道postgresql的主要架构和上面的图片描述的一样。
所以我们组将核心源码的分析工作分成两部分,一部分负责postmaster,也就是守护进程;另一部分负责postgres,也就是服务进程。

我负责的部分

我和另一名组员负责postmaster部分。postmaster对于postgresql来说就像一个总控制台,一旦开启一个数据库实例(pg_ctl start),postmaster进程就开始运行。它的主要功能如下:

  • 负责整个系统的启动和关闭
  • 在服务进程出现错误时完成系统的恢复。
  • 管理数据库文件
  • 监听并接收来自客户端的连接请求,并为客户端fork一个postgres服务进程,代替客户端在数据库上执行各种命令。
  • 管理与数据库运行相关的辅助进程。
    1. writer process 在适当的时间点把共享内存上的缓存写往磁盘。
    2. WAL writer process 把共享内存上的WAL缓存在适当的时间点往磁盘写。
    3. Archive process 把WAL日志转移到归档日志里。
    4. stats collector process 统计信息的收集进程。
    5. Logger process 把postgresql的活动状态写到日志信息文件(并非事务日志),在指定的时间间隔里面,对日志文件进行rotate。
    6. autovacuum launcher process是依赖于postmaster间接启动vacuum进程。从而实现自动回收空间和统计信息。

功能上看,postmaster的作用是非常核心的,它对整个DBMS系统的正常运行至关重要。我们分析的重点会放在一些核心的指令,数据库文件的管理、部分辅助进程上。

主要源码

在这里插入图片描述

我们要分析的主要源码集中在src文件夹(存放源码的文件夹)中的这三个文件夹中。

  • backend文件夹就是存放postmaster和postgres相关源码的文件夹。
  • bin文件夹存放的是实现UNIX指令的源码。
  • interfaces文件夹存放的是前端和后端实现通信的源码。

    在这里插入图片描述

    而backend文件夹里也有很多文件夹,我可能会分析到的有
  • postmaster文件夹,包含postmaster源码以及各种辅助进程的源码;
  • libpq文件夹,包含前后端通信的源码;
  • storage文件夹,涉及到共享内存的实现、磁盘上的存储、缓存以及记录等源码。

经过初步了解,将代码的分析范围划定到了这几个文件夹里,还无法定位到具体的代码文件,这需要以后的分析里,通过函数以及文件调用,逐个定位具体文件,具体的代码

分析方式

由于postmaster所处理的异常情况不太容易出现,因此大部分源码的分析都只能依靠直接阅读。部分方便调试的会使用gdb进行调试,从而简化源码的分析。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐