aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-06-07 17:42:27 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-06-07 17:43:11 -0400
commitece01aae479227d9836294b287d872c5a6146a11 (patch)
treec079ac4532474ccd3803f21a95ffb08fb8373dd9 /src/backend/access
parent5baf6da71701abcb76487d9de68f7d7dc6c365e9 (diff)
downloadpostgresql-ece01aae479227d9836294b287d872c5a6146a11.tar.gz
postgresql-ece01aae479227d9836294b287d872c5a6146a11.zip
Scan the buffer pool just once, not once per fork, during relation drop.
This provides a speedup of about 4X when NBuffers is large enough. There is also a useful reduction in sinval traffic, since we only do CacheInvalidateSmgr() once not once per fork. Simon Riggs, reviewed and somewhat revised by Tom Lane
Diffstat (limited to 'src/backend/access')
-rw-r--r--src/backend/access/transam/twophase.c6
-rw-r--r--src/backend/access/transam/xact.c8
2 files changed, 3 insertions, 11 deletions
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 6db46c00109..0b41a76a325 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1356,12 +1356,8 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
for (i = 0; i < ndelrels; i++)
{
SMgrRelation srel = smgropen(delrels[i], InvalidBackendId);
- ForkNumber fork;
- for (fork = 0; fork <= MAX_FORKNUM; fork++)
- {
- smgrdounlink(srel, fork, false);
- }
+ smgrdounlink(srel, false);
smgrclose(srel);
}
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 49c14cb64c0..659b53524cd 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -4638,10 +4638,8 @@ xact_redo_commit_internal(TransactionId xid, XLogRecPtr lsn,
ForkNumber fork;
for (fork = 0; fork <= MAX_FORKNUM; fork++)
- {
XLogDropRelation(xnodes[i], fork);
- smgrdounlink(srel, fork, true);
- }
+ smgrdounlink(srel, true);
smgrclose(srel);
}
@@ -4778,10 +4776,8 @@ xact_redo_abort(xl_xact_abort *xlrec, TransactionId xid)
ForkNumber fork;
for (fork = 0; fork <= MAX_FORKNUM; fork++)
- {
XLogDropRelation(xlrec->xnodes[i], fork);
- smgrdounlink(srel, fork, true);
- }
+ smgrdounlink(srel, true);
smgrclose(srel);
}
}