1. 首页
  2. 大数据

如何运用StartupXLOG函数恢复读取WAL?

1、崩溃恢复和备机回放都是StartupXLOG函数进行处理,从pgcontrol文件中读取checkpoint位置,从这个位置开始读取WAL记录进行回放。

如何运用StartupXLOG函数恢复读取WAL?

1、崩溃恢复和备机回放都是StartupXLOG函数进行处理,从pgcontrol文件中读取checkpoint位置,从这个位置开始读取WAL记录进行回放。

2、读取一个WAL记录的函数是ReadRecord,读取会后,根据类型进行回放;然后循环调用这个函数读取下一个WAL记录。

3、ReadRecord调用函数XLogReadRecord读取下一个WAL记录,若请求的记录不在当前页中,则需要读取一页到内存。如果读取的record为NULL,且是备机则切换日志源,从下一个日志源读取WAL

4、读取WAL的函数ReadPageInternal->XLogPageRead,日志源为流复制则根据条件判断读入的长度,否则为1页大小,但真正进行read的时候是以页为单位的。这里应该是读取的真实日志量。

5、日志读入内存的XLogReaderState->readBuf中,这个大小为8KB即一页大小。XLogReaderState->readLen为读入的日志量,有可能比8KB小

6、若下个WAL记录在下一页,需要跳过页头信息,否则为state->EndRecPtr即当前已读取的WAL记录末尾+1,即下一个WAL记录头

7、请求的大小为Min(targetRecOff + SizeOfXLogRecord, XLOG_BLCKSZ),即targetRecOff为WAL记录页内偏移,加上SizeOfXLogRecord即WAL记录头,即ReadPageInternal的reqLen长度最大才为一页大小。所以判断请求的WAL是否还在当前readBuf中条件:

if (targetSegNo == state->readSegNo && targetPageOff == state->readOff && reqLen <= state->readLen)

免责声明:本站旨在传递信息,不代表有传资讯的观点和立场。本站遵循行业规范,如转载您的文章未标注版权,请联系我们(QQ:78799268)改正。本站的原创文章,如若转载,请注明出处:http://www.ainoline.cn/dashuju/18258.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:78799268@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code