1.3.1.2 Xlog共享缓存格式及作用
xlog.c文件中:
typedef struct XLogCtlData
{
XLogCtlInsert Insert; /* 被WALInsertLock保护,标识新的可插入到xlog文件中的位置等信息,其中“forcePageWrites”为“PITR”技术提供了条件支持 */
/* Protected by info_lck: */
XLogwrtRqst LogwrtRqst;
XLogwrtResult LogwrtResult; /* 以上两个提供了对于写日志时支持,决定了如何写的条件 */
uint32 ckptXidEpoch; /* nextXID & epoch of latest checkpoint ,有何作用?*/
TransactionId ckptXid; /*同上,被“GetNextXidAndEpoch”函数使用,但不知有和作用? */
/* Protected by WALWriteLock: */
XLogCtlWrite Write; /*作用很大,但关系还是不很明朗? */
/*
* These values do not change after startup, although the pointed-to pages
* and xlblocks values certainly do. Permission to read/write the pages
* and xlblocks values depends on WALInsertLock and WALWriteLock.
*/
char *pages; /* buffers for unwritten XLOG pages */
XLogRecPtr *xlblocks; /* 1st byte ptr-s + XLOG_BLCKSZ */
Size XLogCacheByte; /* # bytes in xlog buffers */
int XLogCacheBlck; /* highest allocated xlog buffer index */
TimeLineID ThisTimeLineID; /*标识物理日志文件的文件名中的时间线同用户的恢复方式有关,如果用户不是恢复到崩溃点(即恢复到以前的某个时间点或以前的某个事务号),则时间线增1*/
slock_t info_lck; /* 自旋锁,保护自己;locks shared variables shown above */
} XLogCtlData;