Skip to content

Commit b7509d4

Browse files
committed
OPtimize storing zero page image in WAL as FPI
1 parent 5e7285f commit b7509d4

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

src/backend/access/transam/xloginsert.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -638,22 +638,30 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
638638
*/
639639
if (regbuf->flags & REGBUF_STANDARD)
640640
{
641-
/* Assume we can omit data between pd_lower and pd_upper */
642-
uint16 lower = ((PageHeader) page)->pd_lower;
643-
uint16 upper = ((PageHeader) page)->pd_upper;
644-
645-
if (lower >= SizeOfPageHeaderData &&
646-
upper > lower &&
647-
upper <= BLCKSZ)
641+
if (PageIsNew(page))
648642
{
649-
bimg.hole_offset = lower;
650-
cbimg.hole_length = upper - lower;
643+
bimg.hole_offset = 0;
644+
cbimg.hole_length = BLCKSZ;
651645
}
652646
else
653647
{
654-
/* No "hole" to remove */
655-
bimg.hole_offset = 0;
656-
cbimg.hole_length = 0;
648+
/* Assume we can omit data between pd_lower and pd_upper */
649+
uint16 lower = ((PageHeader) page)->pd_lower;
650+
uint16 upper = ((PageHeader) page)->pd_upper;
651+
652+
if (lower >= SizeOfPageHeaderData &&
653+
upper > lower &&
654+
upper <= BLCKSZ)
655+
{
656+
bimg.hole_offset = lower;
657+
cbimg.hole_length = upper - lower;
658+
}
659+
else
660+
{
661+
/* No "hole" to remove */
662+
bimg.hole_offset = 0;
663+
cbimg.hole_length = 0;
664+
}
657665
}
658666
}
659667
else

src/backend/access/transam/xlogreader.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1873,7 +1873,9 @@ DecodeXLogRecord(XLogReaderState *state,
18731873
if ((blk->bimg_info & BKPIMAGE_HAS_HOLE) &&
18741874
(blk->hole_offset == 0 ||
18751875
blk->hole_length == 0 ||
1876-
blk->bimg_len == BLCKSZ))
1876+
blk->bimg_len == BLCKSZ) &&
1877+
!(blk->hole_offset == 0 &&
1878+
blk->hole_length == BLCKSZ)) /* null page */
18771879
{
18781880
report_invalid_record(state,
18791881
"BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X",

0 commit comments

Comments
 (0)