前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非易失性WAL buffer实现解析(五)

非易失性WAL buffer实现解析(五)

作者头像
yzsDBA
发布2020-10-28 09:36:11
4390
发布2020-10-28 09:36:11
举报
文章被收录于专栏:PostgreSQL研究与原理解析

本文接着介绍非易失性WAL buffer对StartupXLOG流程的改造。

1)StartupXLO流程中,当WAL日志回放完退出回放循环后,对其进行改造

2)ControlFile->discardedUpTo为新增加的变量,表示这个节点之前的WAL段文件可以回收了,这个位点以WAL段文件大小为单位。

3)如果EndOfLog<=discardedUpTo,即最后的回放的位置在需要回收的范围内:此时将整个NVM WAL BUFFER清0并持久化到nvm介质,同时更新ControlFile->discardedUpTo为初始值并写到pg_control文件

4)如果EndOfLog>discardedUpTo:需要重新初始化XLogCtl->xlblocks数组,即如下图所示,discardedUpTo的位置开始+一页大小作为XLogCtl->xlblocks[idx+1],依次类推直到最后位置

5)如果EndOfLog位于一页中间,即不在页边界上:需要将xlogreader->readBuf即最后回放的WAL页有效内容拷贝到EndOfLog所在页,并将剩余内容清0,然后调用nv_persist将该页内容持久化到NVM,如下图最后一个block所示。并再初始化最后一个XLogCtl->xlblocks[]数组,及初始化位置XLogCtl->InitializedUpTo为末尾处。

6)如果EndOfLog位于页边界上:XLogCtl->InitializedUpTo = EndOfLog;,将初始化位置保存为EndOfLog

7)接着需要对LogwrtResult和XLogCtl->LogwrtResult处理

8)最后需要预分配一个XLOG文件。如果是NVM wal BUFFER,则需调用PreallocNonVolatileXlogBuffer函数,否则调用PreallocXlogFiles。对于NVM WAL BUFFER的预分配,下篇文章接着介绍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档