分析重点:

  • 数据结构,变量—>以此来推断每个细节点,需要初始化的变量 信号量
  • 算法
  • 整体过程
  • 忽略细节,写入 接受 刷盘等 侧重整体设计,但是整体设计可以有没实现的地方

启动过程:
如果连接失败,关闭命令窗口,重开
detach 退出

在 PostgreSQL 源码或者文档中,通常认为 ‘backend’ 和 ‘server’ 是等价的,表示服务端;同样,’frontend’ 和 ‘client’ 是等价的,表示客户端。

attach 完之后,如何优雅退出:ctrl+c, 输入quit

  1. #0 0x00007f0457241b23 in __select_nocancel () from /lib64/libc.so.6
  2. #1 0x00000000007f343a in pg_usleep (microsec=100000) at pgsleep.c:43
  3. #2 0x00000000006944f2 in WalSndLoop () at walsender.c:439
  4. #3 0x0000000000693d8c in WalSenderMain () at walsender.c:147
  5. #4 0x00000000006c53d4 in PostgresMain (argc=2, argv=0x1a69938, username=0x1a698f0 "repuser")
  6. at postgres.c:3625
  1. #0 0x00007fdc22f43dc0 in __poll_nocancel () from /lib64/libc.so.6
  2. #1 0x00007fdc1a0b67d8 in libpq_select (timeout_ms=100) at libpqwalreceiver.c:204
  3. #2 0x00007fdc1a0b69cb in libpqrcv_receive (timeout=100, type=0x7ffd3b3773d7 "w",
  4. buffer=0x7ffd3b3773c8, len=0x7ffd3b3773c4) at libpqwalreceiver.c:359
  5. #3 0x0000000000695ab6 in WalReceiverMain () at walreceiver.c:299
  6. #4 0x00000000004d726c in AuxiliaryProcessMain (argc=2, argv=0x7ffd3b3778a0) at bootstrap.c:428
  7. #5 0x0000000000680439 in StartChildProcess (type=WalReceiverProcess) at postmaster.c:4418
  8. #6 0x0000000000680083 in sigusr1_handler (postgres_signal_arg=10) at postmaster.c:4240

WalSenderMain

数据结构声明

XLog相关
image.png

image.png
image.png

image.png

image.png

image.png
image.png

walsender相关
image.png

image.png
大部分源码太多这里无法展示——->转移至亿图流程图
image.png

变量声明:
XLogSegSize:段的大小
XLogSegsPerFile:每个文件段的数目
XLogFileSize:段大小 * 段数目
XLOG_BLCKSZ 8K:页的大小

sendFile:打开的文件fd

image.png
(5)postgresql 9.0源码分析 - 图12
pg_control: 主要分为是三部分,初始化静态信息、WAL及检查点的动态信息、一些配置信息

问题:如何调试一个中途启动的进程
(char*) &a
调试 MyProcPort 的值
主备连接的过程

调试一下变量地址的计算

WalReceiverMain

image.png

StartupProcessMain (关键)