diff options
| author | Tom Lane | 2005-03-20 22:00:54 +0000 |
|---|---|---|
| committer | Tom Lane | 2005-03-20 22:00:54 +0000 |
| commit | 354049c709c9d7d0918272e10e4f30d7f8f38788 (patch) | |
| tree | 741c359a1e6494c3ef1b205b84603fd48239b015 /src/backend/commands/vacuum.c | |
| parent | 683f60da3d837236de5c4249fa2a62c8a94616ca (diff) | |
Remove unnecessary calls of FlushRelationBuffers: there is no need
to write out data that we are about to tell the filesystem to drop.
smgr_internal_unlink already had a DropRelFileNodeBuffers call to
get rid of dead buffers without a write after it's no longer possible
to roll back the deleting transaction. Adding a similar call in
smgrtruncate simplifies callers and makes the overall division of
labor clearer. This patch removes the former behavior that VACUUM
would write all dirty buffers of a relation unconditionally.
Diffstat (limited to 'src/backend/commands/vacuum.c')
| -rw-r--r-- | src/backend/commands/vacuum.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index a0ee3e8f355..b2b39c5a58c 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.304 2005/03/16 21:38:05 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.305 2005/03/20 22:00:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1138,16 +1138,6 @@ full_vacuum_rel(Relation onerel, VacuumStmt *vacstmt) /* Clean pages from vacuum_pages list */ vacuum_heap(vacrelstats, onerel, &vacuum_pages); } - else - { - /* - * Flush dirty pages out to disk. We must do this even if we - * didn't do anything else, because we want to ensure that all - * tuples have correct on-row commit status on disk (see - * bufmgr.c's comments for FlushRelationBuffers()). - */ - FlushRelationBuffers(onerel, vacrelstats->rel_pages); - } } /* update shared free space map with final free space info */ @@ -2420,15 +2410,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, pfree(Nvacpagelist.pagedesc); } - /* - * Flush dirty pages out to disk. We do this unconditionally, even if - * we don't need to truncate, because we want to ensure that all - * tuples have correct on-row commit status on disk (see bufmgr.c's - * comments for FlushRelationBuffers()). - */ - FlushRelationBuffers(onerel, blkno); - - /* truncate relation, if needed */ + /* Truncate relation, if needed */ if (blkno < nblocks) { RelationTruncate(onerel, blkno); @@ -2818,27 +2800,17 @@ vacuum_heap(VRelStats *vacrelstats, Relation onerel, VacPageList vacuum_pages) } } - /* - * Flush dirty pages out to disk. We do this unconditionally, even if - * we don't need to truncate, because we want to ensure that all - * tuples have correct on-row commit status on disk (see bufmgr.c's - * comments for FlushRelationBuffers()). - */ + /* Truncate relation if there are some empty end-pages */ Assert(vacrelstats->rel_pages >= vacuum_pages->empty_end_pages); - relblocks = vacrelstats->rel_pages - vacuum_pages->empty_end_pages; - - FlushRelationBuffers(onerel, relblocks); - - /* truncate relation if there are some empty end-pages */ if (vacuum_pages->empty_end_pages > 0) { + relblocks = vacrelstats->rel_pages - vacuum_pages->empty_end_pages; ereport(elevel, (errmsg("\"%s\": truncated %u to %u pages", RelationGetRelationName(onerel), vacrelstats->rel_pages, relblocks))); RelationTruncate(onerel, relblocks); - vacrelstats->rel_pages = relblocks; /* set new number of - * blocks */ + vacrelstats->rel_pages = relblocks; /* set new number of blocks */ } } |
