mirror of https://github.com/postgres/postgres
Don't initialize page in {vm,fsm}_extend(), not needed
The read path needs to be able to initialize pages anyway, as relation extensions are not durable. By avoiding initializing pages, we can, in a future patch, extend the relation by multiple blocks at once. Using smgrextend() for {vm,fsm}_extend() is not a good idea in general, as at least one page of the VM/FSM will be read immediately after, always causing a cache miss, requiring us to read content we just wrote. Discussion: https://postgr.es/m/20230301223515.pucbj7nb54n4i4nv@awork3.anarazel.de
This commit is contained in:
parent
86a3fc7ec8
commit
3d6a98457d
|
@ -622,11 +622,9 @@ static void
|
||||||
vm_extend(Relation rel, BlockNumber vm_nblocks)
|
vm_extend(Relation rel, BlockNumber vm_nblocks)
|
||||||
{
|
{
|
||||||
BlockNumber vm_nblocks_now;
|
BlockNumber vm_nblocks_now;
|
||||||
PGAlignedBlock pg;
|
PGAlignedBlock pg = {0};
|
||||||
SMgrRelation reln;
|
SMgrRelation reln;
|
||||||
|
|
||||||
PageInit((Page) pg.data, BLCKSZ, 0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We use the relation extension lock to lock out other backends trying to
|
* We use the relation extension lock to lock out other backends trying to
|
||||||
* extend the visibility map at the same time. It also locks out extension
|
* extend the visibility map at the same time. It also locks out extension
|
||||||
|
@ -662,8 +660,6 @@ vm_extend(Relation rel, BlockNumber vm_nblocks)
|
||||||
/* Now extend the file */
|
/* Now extend the file */
|
||||||
while (vm_nblocks_now < vm_nblocks)
|
while (vm_nblocks_now < vm_nblocks)
|
||||||
{
|
{
|
||||||
PageSetChecksumInplace((Page) pg.data, vm_nblocks_now);
|
|
||||||
|
|
||||||
smgrextend(reln, VISIBILITYMAP_FORKNUM, vm_nblocks_now, pg.data, false);
|
smgrextend(reln, VISIBILITYMAP_FORKNUM, vm_nblocks_now, pg.data, false);
|
||||||
vm_nblocks_now++;
|
vm_nblocks_now++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -608,10 +608,9 @@ static void
|
||||||
fsm_extend(Relation rel, BlockNumber fsm_nblocks)
|
fsm_extend(Relation rel, BlockNumber fsm_nblocks)
|
||||||
{
|
{
|
||||||
BlockNumber fsm_nblocks_now;
|
BlockNumber fsm_nblocks_now;
|
||||||
PGAlignedBlock pg;
|
PGAlignedBlock pg = {0};
|
||||||
SMgrRelation reln;
|
SMgrRelation reln;
|
||||||
|
|
||||||
PageInit((Page) pg.data, BLCKSZ, 0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We use the relation extension lock to lock out other backends trying to
|
* We use the relation extension lock to lock out other backends trying to
|
||||||
|
@ -649,8 +648,6 @@ fsm_extend(Relation rel, BlockNumber fsm_nblocks)
|
||||||
/* Extend as needed. */
|
/* Extend as needed. */
|
||||||
while (fsm_nblocks_now < fsm_nblocks)
|
while (fsm_nblocks_now < fsm_nblocks)
|
||||||
{
|
{
|
||||||
PageSetChecksumInplace((Page) pg.data, fsm_nblocks_now);
|
|
||||||
|
|
||||||
smgrextend(reln, FSM_FORKNUM, fsm_nblocks_now,
|
smgrextend(reln, FSM_FORKNUM, fsm_nblocks_now,
|
||||||
pg.data, false);
|
pg.data, false);
|
||||||
fsm_nblocks_now++;
|
fsm_nblocks_now++;
|
||||||
|
|
Loading…
Reference in New Issue