Skip to content

Commit 846ecef

Browse files
author
hackorum
committed
Apply clear_page.patch
1 parent b597835 commit 846ecef

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

src/backend/storage/page/bufpage.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,17 @@ compactify_tuples(itemIdCompact itemidbase, int nitems, Page page, bool presorte
688688
phdr->pd_upper = upper;
689689
}
690690

691+
/*
692+
* Clean up space between pd_lower and pd_upper for better page compression.
693+
*/
694+
static void
695+
memset_hole(Page page, LocationIndex old_pd_upper)
696+
{
697+
PageHeader phdr = (PageHeader) page;
698+
if (phdr->pd_upper > old_pd_upper)
699+
MemSet((char *)page + old_pd_upper, 0, phdr->pd_upper - old_pd_upper);
700+
}
701+
691702
/*
692703
* PageRepairFragmentation
693704
*
@@ -800,6 +811,7 @@ PageRepairFragmentation(Page page)
800811

801812
compactify_tuples(itemidbase, nstorage, page, presorted);
802813
}
814+
memset_hole(page, pd_upper);
803815

804816
if (finalusedlp != nline)
805817
{
@@ -1130,6 +1142,7 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
11301142

11311143
if (offset > phdr->pd_upper)
11321144
memmove(addr + size, addr, offset - phdr->pd_upper);
1145+
MemSet(addr, 0, size);
11331146

11341147
/* adjust free space boundary pointers */
11351148
phdr->pd_upper += size;
@@ -1287,6 +1300,7 @@ PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
12871300
compactify_tuples(itemidbase, nused, page, presorted);
12881301
else
12891302
phdr->pd_upper = pd_special;
1303+
memset_hole(page, pd_upper);
12901304
}
12911305

12921306

@@ -1367,6 +1381,7 @@ PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
13671381

13681382
if (offset > phdr->pd_upper)
13691383
memmove(addr + size, addr, offset - phdr->pd_upper);
1384+
MemSet(addr, 0, size);
13701385

13711386
/* adjust free space boundary pointer */
13721387
phdr->pd_upper += size;

0 commit comments

Comments
 (0)