PostgreSQL启动过程中的那些事十九:walwriter进程二

 

3

这节主要讨论 walwriter 进程到了 WalWriterMain ,设置合适的信号处理句柄, 创建一个资源属主以保持对本进程资源的跟踪 , 创建一个本进程的所有工作都在其内做的内存上下文 "Wal Writer" ,创建这个内存上下文是为了本进程在错误恢复期间能重置 context 并且因此避免可能的内存泄漏。 设置错误跳跃点。接着不堵塞信号(当 postmaster 进程 fork 本进程时用 PG_SETMASK(&BlockSig) 堵塞了他们)。然后进入无限循环,检查并处理任何请求或者最近收到的信号。然后调用 XLogBackgroundFlush 把相应 XLOG 写入事务日志文件。 然后睡眠指定时间后再接着循环。

 

 

WalWriterMain 方法的调用序列图

 

 

下面时 WalWriterMain 流程图

 

 

WalWriterMain 流程图

 

WalWriterMain 中主要是 调用 XLogBackgroundFlush 把相应 XLOG 写入事务日志文件。在 XLogBackgroundFlush 里,判断如果需要写( 1 不在恢复过程中, 2 XLOG 写请求位置 WriteRqstPtr 在上次写 XLOG 结果的刷出位置 LogwrtResultg.Flush 的后面) XLOG 日志,调用 XLogWrite 方法, 写和 / 或文件同步 xlog 日志 至少到 WriteRqst 指明的位置,这是通过调用 writeissue_xlog_fsync 完成的,最后到了操作系统的 writesync 接口。




------------
转载请著明出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值