Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit354049c

Browse files
committed
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 toget rid of dead buffers without a write after it's no longer possibleto roll back the deleting transaction. Adding a similar call insmgrtruncate simplifies callers and makes the overall division oflabor clearer. This patch removes the former behavior that VACUUMwould write all dirty buffers of a relation unconditionally.
1 parent683f60d commit354049c

File tree

10 files changed

+92
-237
lines changed

10 files changed

+92
-237
lines changed

‎src/backend/access/nbtree/nbtree.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* Portions Copyright (c) 1994, Regents of the University of California
1313
*
1414
* IDENTIFICATION
15-
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.124 2004/12/31 21:59:22 pgsql Exp $
15+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.125 2005/03/20 22:00:50 tgl Exp $
1616
*
1717
*-------------------------------------------------------------------------
1818
*/
@@ -772,17 +772,6 @@ btvacuumcleanup(PG_FUNCTION_ARGS)
772772
{
773773
/*
774774
* Okay to truncate.
775-
*
776-
* First, flush any shared buffers for the blocks we intend to
777-
* delete.FlushRelationBuffers is a bit more than we need
778-
* for this, since it will also write out dirty buffers for
779-
* blocks we aren't deleting, but it's the closest thing in
780-
* bufmgr's API.
781-
*/
782-
FlushRelationBuffers(rel,new_pages);
783-
784-
/*
785-
* Do the physical truncation.
786775
*/
787776
RelationTruncate(rel,new_pages);
788777

‎src/backend/catalog/heap.c

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.280 2005/01/27 03:17:17 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.281 2005/03/20 22:00:51 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1174,12 +1174,6 @@ heap_drop_with_catalog(Oid relid)
11741174
*/
11751175
rel=relation_open(relid,AccessExclusiveLock);
11761176

1177-
/*
1178-
* Release all buffers that belong to this relation, after writing any
1179-
* that are dirty
1180-
*/
1181-
FlushRelationBuffers(rel, (BlockNumber)0);
1182-
11831177
/*
11841178
* Schedule unlinking of the relation's physical file at commit.
11851179
*/
@@ -1958,13 +1952,7 @@ RelationTruncateIndexes(Oid heapId)
19581952
/* Fetch info needed for index_build */
19591953
indexInfo=BuildIndexInfo(currentIndex);
19601954

1961-
/*
1962-
* Drop any buffers associated with this index. If they're dirty,
1963-
* they're just dropped without bothering to flush to disk.
1964-
*/
1965-
DropRelationBuffers(currentIndex);
1966-
1967-
/* Now truncate the actual data */
1955+
/* Now truncate the actual file (and discard buffers) */
19681956
RelationTruncate(currentIndex,0);
19691957

19701958
/* Initialize the index and rebuild */
@@ -2024,13 +2012,7 @@ heap_truncate(List *relids)
20242012
{
20252013
Relationrel=lfirst(cell);
20262014

2027-
/*
2028-
* Release any buffers associated with this relation. If they're
2029-
* dirty, they're just dropped without bothering to flush to disk.
2030-
*/
2031-
DropRelationBuffers(rel);
2032-
2033-
/* Now truncate the actual data */
2015+
/* Truncate the actual file (and discard buffers) */
20342016
RelationTruncate(rel,0);
20352017

20362018
/* If this relation has indexes, truncate the indexes too */

‎src/backend/catalog/index.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.247 2005/03/16 21:38:04 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.248 2005/03/20 22:00:51 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -775,10 +775,8 @@ index_drop(Oid indexId)
775775
LockRelation(userIndexRelation,AccessExclusiveLock);
776776

777777
/*
778-
*flush buffer cache and schedule physical removal of the file
778+
*Schedule physical removal of the file
779779
*/
780-
FlushRelationBuffers(userIndexRelation, (BlockNumber)0);
781-
782780
RelationOpenSmgr(userIndexRelation);
783781
smgrscheduleunlink(userIndexRelation->rd_smgr,
784782
userIndexRelation->rd_istemp);
@@ -1617,14 +1615,7 @@ reindex_index(Oid indexId)
16171615

16181616
if (inplace)
16191617
{
1620-
/*
1621-
* Release any buffers associated with this index.If they're
1622-
* dirty, they're just dropped without bothering to flush to
1623-
* disk.
1624-
*/
1625-
DropRelationBuffers(iRel);
1626-
1627-
/* Now truncate the actual data */
1618+
/* Truncate the actual file (and discard buffers) */
16281619
RelationTruncate(iRel,0);
16291620
}
16301621
else

‎src/backend/commands/cluster.c

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.132 2005/02/06 20:19:08 tgl Exp $
14+
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.133 2005/03/20 22:00:52 tgl Exp $
1515
*
1616
*-------------------------------------------------------------------------
1717
*/
@@ -709,8 +709,7 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
709709
void
710710
swap_relation_files(Oidr1,Oidr2)
711711
{
712-
RelationrelRelation,
713-
rel;
712+
RelationrelRelation;
714713
HeapTuplereltup1,
715714
reltup2;
716715
Form_pg_classrelform1,
@@ -735,20 +734,6 @@ swap_relation_files(Oid r1, Oid r2)
735734
elog(ERROR,"cache lookup failed for relation %u",r2);
736735
relform2= (Form_pg_class)GETSTRUCT(reltup2);
737736

738-
/*
739-
* The buffer manager gets confused if we swap relfilenodes for
740-
* relations that are not both local or non-local to this transaction.
741-
* Flush the buffers on both relations so the buffer manager can
742-
* forget about'em. (XXX this might not be necessary anymore?)
743-
*/
744-
rel=relation_open(r1,NoLock);
745-
FlushRelationBuffers(rel,0);
746-
relation_close(rel,NoLock);
747-
748-
rel=relation_open(r2,NoLock);
749-
FlushRelationBuffers(rel,0);
750-
relation_close(rel,NoLock);
751-
752737
/*
753738
* Actually swap the fields in the two tuples
754739
*/

‎src/backend/commands/tablecmds.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.147 2005/03/16 21:38:05 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.148 2005/03/20 22:00:52 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -5628,13 +5628,12 @@ copy_relation_data(Relation rel, SMgrRelation dst)
56285628
Pagepage= (Page)buf;
56295629

56305630
/*
5631-
* Since we copy thedata directly without looking at the shared
5631+
* Since we copy thefile directly without looking at the shared
56325632
* buffers, we'd better first flush out any pages of the source
5633-
* relation that are in shared buffers. We assume no new pages will
5634-
* get loaded into buffers while we are holding exclusive lock on the
5635-
* rel.
5633+
* relation that are in shared buffers. We assume no new changes
5634+
* will be made while we are holding exclusive lock on the rel.
56365635
*/
5637-
FlushRelationBuffers(rel,0);
5636+
FlushRelationBuffers(rel);
56385637

56395638
/*
56405639
* We need to log the copied data in WAL iff WAL archiving is enabled

‎src/backend/commands/vacuum.c

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
*
1515
* IDENTIFICATION
16-
* $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.304 2005/03/16 21:38:05 tgl Exp $
16+
* $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.305 2005/03/20 22:00:52 tgl Exp $
1717
*
1818
*-------------------------------------------------------------------------
1919
*/
@@ -1138,16 +1138,6 @@ full_vacuum_rel(Relation onerel, VacuumStmt *vacstmt)
11381138
/* Clean pages from vacuum_pages list */
11391139
vacuum_heap(vacrelstats,onerel,&vacuum_pages);
11401140
}
1141-
else
1142-
{
1143-
/*
1144-
* Flush dirty pages out to disk. We must do this even if we
1145-
* didn't do anything else, because we want to ensure that all
1146-
* tuples have correct on-row commit status on disk (see
1147-
* bufmgr.c's comments for FlushRelationBuffers()).
1148-
*/
1149-
FlushRelationBuffers(onerel,vacrelstats->rel_pages);
1150-
}
11511141
}
11521142

11531143
/* update shared free space map with final free space info */
@@ -2420,15 +2410,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
24202410
pfree(Nvacpagelist.pagedesc);
24212411
}
24222412

2423-
/*
2424-
* Flush dirty pages out to disk. We do this unconditionally, even if
2425-
* we don't need to truncate, because we want to ensure that all
2426-
* tuples have correct on-row commit status on disk (see bufmgr.c's
2427-
* comments for FlushRelationBuffers()).
2428-
*/
2429-
FlushRelationBuffers(onerel,blkno);
2430-
2431-
/* truncate relation, if needed */
2413+
/* Truncate relation, if needed */
24322414
if (blkno<nblocks)
24332415
{
24342416
RelationTruncate(onerel,blkno);
@@ -2818,27 +2800,17 @@ vacuum_heap(VRelStats *vacrelstats, Relation onerel, VacPageList vacuum_pages)
28182800
}
28192801
}
28202802

2821-
/*
2822-
* Flush dirty pages out to disk. We do this unconditionally, even if
2823-
* we don't need to truncate, because we want to ensure that all
2824-
* tuples have correct on-row commit status on disk (see bufmgr.c's
2825-
* comments for FlushRelationBuffers()).
2826-
*/
2803+
/* Truncate relation if there are some empty end-pages */
28272804
Assert(vacrelstats->rel_pages >=vacuum_pages->empty_end_pages);
2828-
relblocks=vacrelstats->rel_pages-vacuum_pages->empty_end_pages;
2829-
2830-
FlushRelationBuffers(onerel,relblocks);
2831-
2832-
/* truncate relation if there are some empty end-pages */
28332805
if (vacuum_pages->empty_end_pages>0)
28342806
{
2807+
relblocks=vacrelstats->rel_pages-vacuum_pages->empty_end_pages;
28352808
ereport(elevel,
28362809
(errmsg("\"%s\": truncated %u to %u pages",
28372810
RelationGetRelationName(onerel),
28382811
vacrelstats->rel_pages,relblocks)));
28392812
RelationTruncate(onerel,relblocks);
2840-
vacrelstats->rel_pages=relblocks;/* set new number of
2841-
* blocks */
2813+
vacrelstats->rel_pages=relblocks;/* set new number of blocks */
28422814
}
28432815
}
28442816

‎src/backend/commands/vacuumlazy.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
*
3232
*
3333
* IDENTIFICATION
34-
* $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.50 2004/12/31 21:59:42 pgsql Exp $
34+
* $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.51 2005/03/20 22:00:52 tgl Exp $
3535
*
3636
*-------------------------------------------------------------------------
3737
*/
@@ -773,16 +773,6 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats)
773773

774774
/*
775775
* Okay to truncate.
776-
*
777-
* First, flush any shared buffers for the blocks we intend to delete.
778-
* FlushRelationBuffers is a bit more than we need for this, since it
779-
* will also write out dirty buffers for blocks we aren't deleting,
780-
* but it's the closest thing in bufmgr's API.
781-
*/
782-
FlushRelationBuffers(onerel,new_rel_pages);
783-
784-
/*
785-
* Do the physical truncation.
786776
*/
787777
RelationTruncate(onerel,new_rel_pages);
788778

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp