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

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

作者头像
yzsDBA
发布2020-10-28 09:50:18
3050
发布2020-10-28 09:50:18
举报

本文接着介绍WAL写和读的改造。

1、XLogInsert函数改造:将日志写入NVM,此时不确定CPU CACHE何时刷以及顺序

当日志量距离上次checkpoint产生的WAL文件个数(wal_segment_size)超过CheckPointSegments时,需要发起checkpoint请求。需要保证WAL buffer空间够用。

2、XLogPageRead读取指定WAL所在页到readBuf

1)readSource的WAL源不是NVM,默认是XLOG_FROM_ANY && Wal记录所在位置的文件未open或者读取WAL源为流复制且需要的日志还未接收到时需要调用函数WaitForWALToBecomeAvailable打开所需WAL文件。第一次进来时readSource是XLOG_FROM_ANY,所以当使用NVM时也会进入该函数,只是该函数会返回false。

2)之后,若使用NVM WAL BUFFER并且非备机模式,readSource也不能是流复制,那么需要将日志源改为NVM WAL BUFFER

3)此时readSource为NVM WAL BUFFER,读取大小设置为一页大小

4)XLogCtl->pages+targetPagePtr%NvWalSize为读取页的页头地址,调用memcpy将NVM的一页内存拷贝到readBuf中,并将时间线从该日志页第一个记录中解析出来

5)如果校验该WAL页有效,将当前时间线curFileTLI记为日志页第一个记录中记录的时间线;否则若为主机则直接返回-1,备机的话切换到下一个日志源进行读取

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

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

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

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

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