summaryrefslogtreecommitdiff
path: root/src/backend/commands/vacuum.c
diff options
context:
space:
mode:
authorTom Lane2005-03-20 22:00:54 +0000
committerTom Lane2005-03-20 22:00:54 +0000
commit354049c709c9d7d0918272e10e4f30d7f8f38788 (patch)
tree741c359a1e6494c3ef1b205b84603fd48239b015 /src/backend/commands/vacuum.c
parent683f60da3d837236de5c4249fa2a62c8a94616ca (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.c38
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 */
}
}