如何运用StartupXLOG函数恢复读取WAL?
如何运用StartupXLOG函数恢复读取WAL?1、崩溃恢复和备机回放都是StartupXLOG函数进行处理,从pgcontrol文件中读取checkpoint位置,从这个位置开
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)
-
如何用Python引用一些其他的函数?2021-04-08
-
头文件+宏,完美解决声明函数问题!2021-03-30
-
如何使用OpenCV+Keras+Tensorflow实现去噪算法与自定义预处理函数2021-03-28
-
linux:如何查看函数被哪些函数调用过?2021-03-25
-
不足巴掌大小的脑机接口设备NextMind有何特别之处?2021-03-20
-
华为日志审计系统 HiSec LogAuditor1500通过IPv6 Ready Logo认证2021-03-12
-
如何运用Linux内核访问另外一个模块的函数和变量?2021-03-11
-
PG如何通过元命令获取表文件大小?2021-03-05
-
WBL论文:针对NVM设计日志记录及恢复协议2021-03-05
-
C语言:在函数参数中传递指针的指针简析2021-03-05
-
字符串拷贝函数有哪几种方法,哪个效率最高?2021-03-02
-
程序内如何计算一个函数的执行时间?2021-02-25
-
海信电视、短视频平台等大小屏互动引关注,山东春晚科技感十足2021-02-13
-
标准库函数与基于HAL库函数2020-12-15
-
缘何巴掌大小的无人机能受到企业与用户的青睐呢?2020-12-09