Skip to content

Commit 1740234

Browse files
committed
OPtimize storing zero page image in WAL as FPI
1 parent 05f5c08 commit 1740234

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
@@ -614,22 +614,30 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
614614
*/
615615
if (regbuf->flags & REGBUF_STANDARD)
616616
{
617-
/* Assume we can omit data between pd_lower and pd_upper */
618-
uint16 lower = ((PageHeader) page)->pd_lower;
619-
uint16 upper = ((PageHeader) page)->pd_upper;
620-
621-
if (lower >= SizeOfPageHeaderData &&
622-
upper > lower &&
623-
upper <= BLCKSZ)
617+
if (PageIsNew(page))
624618
{
625-
bimg.hole_offset = lower;
626-
cbimg.hole_length = upper - lower;
619+
bimg.hole_offset = 0;
620+
cbimg.hole_length = BLCKSZ;
627621
}
628622
else
629623
{
630-
/* No "hole" to remove */
631-
bimg.hole_offset = 0;
632-
cbimg.hole_length = 0;
624+
/* Assume we can omit data between pd_lower and pd_upper */
625+
uint16 lower = ((PageHeader) page)->pd_lower;
626+
uint16 upper = ((PageHeader) page)->pd_upper;
627+
628+
if (lower >= SizeOfPageHeaderData &&
629+
upper > lower &&
630+
upper <= BLCKSZ)
631+
{
632+
bimg.hole_offset = lower;
633+
cbimg.hole_length = upper - lower;
634+
}
635+
else
636+
{
637+
/* No "hole" to remove */
638+
bimg.hole_offset = 0;
639+
cbimg.hole_length = 0;
640+
}
633641
}
634642
}
635643
else

src/backend/access/transam/xlogreader.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,7 +1395,9 @@ DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errormsg)
13951395
if ((blk->bimg_info & BKPIMAGE_HAS_HOLE) &&
13961396
(blk->hole_offset == 0 ||
13971397
blk->hole_length == 0 ||
1398-
blk->bimg_len == BLCKSZ))
1398+
blk->bimg_len == BLCKSZ) &&
1399+
!(blk->hole_offset == 0 &&
1400+
blk->hole_length == BLCKSZ)) /* null page */
13991401
{
14001402
report_invalid_record(state,
14011403
"BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X",

0 commit comments

Comments
 (0)