Postgresql日誌系統的實現(四)
1.3.1.2 Xlog共享快取格式及作用
xlog.c檔案中:
typedef struct XLogCtlData
{
XLogCtlInsert Insert; /* 被WALInsertLock保護,標識新的可插入到xlog檔案中的位置等資訊,其中“forcePageWrites”為“PITR”技術提供了條件支援 */
/* Protected by info_lck: */
XLogwrtRqst LogwrtRqst;
XLogwrtResult LogwrtResult;/* 以上兩個提供了對於寫日誌時支援,決定了如何寫的條件 */
uint32ckptXidEpoch;/* 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 */
SizeXLogCacheByte;/* # bytes in xlog buffers */
intXLogCacheBlck;/* highest allocated xlog buffer index */
TimeLineIDThisTimeLineID;/*標識物理日誌檔案的檔名中的時間線同用戶的恢復方式有關,如果使用者不是恢復到崩潰點(即恢復到以前的某個時間點或以前的某個事務號),則時間線增
slock_tinfo_lck;/* 自旋鎖,保護自己;locks shared variables shown above */
} XLogCtlData;