参考内容
PostgreSQL 源码解读(153)- 后台进程#5(walsender#1)
PostgreSQL 源码解读(154)- 后台进程#6(walsender#2)
PostgreSQL 源码解读(155)- 后台进程#7(walsender#3)
知识点:
数据库备份的种类:
- 按备份后的文件类型:
- 物理备份:文件系统级别的备份
- 逻辑备份:备份的是sql文件
- 按备份过程是否停止数据库服务:冷备份、热备份
- 按备份是否是完整数据库:全量备份、增量备份
pg 使用的是增量热备份。
pg 的时间线是一段日志,记录了开始的xlogid与结束的xlogid。
walsender 是 master 节点进程,standby 向 master 发送连接请求,master 的 postmaster 进程收到后启动 walsender 与 standby 节点的 walreceiver 通讯,用于传输 Wal Record
增量备份命令处理的入口:PostgreMain
备份检查与切换时间线函数 exec_replication_command
发送文件函数 WalSndSetState
参考内容
PostgreSQL 源码解读(158)-PG Tools#5(pg_basebackup:what does db server do)
当使用pg_basebackup命令进行全量备份时,postmaster启动新的postgres进程响应此请求,此进程被视为walsender,并执行SendBaseBackup,客户端会收到服务端的备份文件,这个过程如下:
- 把buffer内容备份到日志里
- 把缓存刷盘,并创建restartpoint
- 发送表文件(每次发送一块前要先对这一页的校验码执行校验)
- 发送wal日志文件
参考内容
PostgreSQL 源码解读(159)-PG Tools#6(What does pg_rewind do)
主机变备机时,需要回滚和重做。主要是找到分叉点的位置,找到有更改的块,将原备机的相应块取过来。
参考内容
PostgreSQL 源码解读(160)- 查询#80(如何实现表达式解析)
表达式的执行是按照命令数组一条条执行的,不太复杂的逻辑直接编在代码里,复杂逻辑通过利用finfo进行函数调用实现,入口ExecInterpExpr
参考内容
PostgreSQL 源码解读(161)- 查询#81(如何构建表达式解析步骤#1)
PostgreSQL 源码解读(162)- 查询#81(如何构建表达式解析步骤#2)
PostgreSQL 源码解读(163)- 查询#81(如何构建表达式解析步骤#3)
构建表达式解析步骤:ExecBuildProjectionInfo
-
把执行步骤压栈包括:
- fetch 元组
- 根据元组信息计算表达式
- done
-
为相应计算节点绑定计算函数。
其中初始化节点时会把操作压栈:
组装finfo的过程 ExecInitFunc