diff options
author | Andres Freund <andres@anarazel.de> | 2023-04-05 08:19:39 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2023-04-05 08:19:39 -0700 |
commit | 3d6a98457d8e21d85bed86cfd3e1d1df1b260721 (patch) | |
tree | e305eaf6f711f1b334a5e35224c022e90430dc05 /src/backend/storage/freespace/freespace.c | |
parent | 86a3fc7ec8a03bca7120894bababa7c734628b4c (diff) | |
download | postgresql-3d6a98457d8e21d85bed86cfd3e1d1df1b260721.tar.gz |
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
Diffstat (limited to 'src/backend/storage/freespace/freespace.c')
-rw-r--r-- | src/backend/storage/freespace/freespace.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c index 3e9693b293..90c529958e 100644 --- a/src/backend/storage/freespace/freespace.c +++ b/src/backend/storage/freespace/freespace.c @@ -608,10 +608,9 @@ static void fsm_extend(Relation rel, BlockNumber fsm_nblocks) { BlockNumber fsm_nblocks_now; - PGAlignedBlock pg; + PGAlignedBlock pg = {0}; SMgrRelation reln; - PageInit((Page) pg.data, BLCKSZ, 0); /* * 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. */ while (fsm_nblocks_now < fsm_nblocks) { - PageSetChecksumInplace((Page) pg.data, fsm_nblocks_now); - smgrextend(reln, FSM_FORKNUM, fsm_nblocks_now, pg.data, false); fsm_nblocks_now++; |