diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-06-07 17:42:27 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-06-07 17:43:11 -0400 |
commit | ece01aae479227d9836294b287d872c5a6146a11 (patch) | |
tree | c079ac4532474ccd3803f21a95ffb08fb8373dd9 /src/backend/access | |
parent | 5baf6da71701abcb76487d9de68f7d7dc6c365e9 (diff) | |
download | postgresql-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.c | 6 | ||||
-rw-r--r-- | src/backend/access/transam/xact.c | 8 |
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); } } |