aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2019-11-11 16:34:01 +1300
committerThomas Munro <tmunro@postgresql.org>2019-11-11 17:06:59 +1300
commitdb2687d1f3787aa8113b3dbb358153feee30c64c (patch)
tree077c225c3a719ca4193038165ca152af97f6ac0c
parent695c5977c8bc115029a85dcc1821d7b0136b4e4c (diff)
downloadpostgresql-db2687d1f3787aa8113b3dbb358153feee30c64c.tar.gz
postgresql-db2687d1f3787aa8113b3dbb358153feee30c64c.zip
Optimize PredicateLockTuple().
PredicateLockTuple() has a fast exit if tuple was written by the current transaction, as in that case it already has a lock. This check can be performed using TransactionIdIsCurrentTransactionId() instead of SubTransGetTopmostTransaction(), to avoid any chance of having to hit the disk. Author: Ashwin Agrawal, based on a suggestion from Andres Freund Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/CALfoeiv0k3hkEb3Oqk%3DziWqtyk2Jys1UOK5hwRBNeANT_yX%2Bng%40mail.gmail.com
-rw-r--r--src/backend/storage/lmgr/predicate.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 78fb90fb1bd..86b46d68b99 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -2549,7 +2549,6 @@ PredicateLockTuple(Relation relation, HeapTuple tuple, Snapshot snapshot)
{
PREDICATELOCKTARGETTAG tag;
ItemPointer tid;
- TransactionId targetxmin;
if (!SerializationNeededForRead(relation, snapshot))
return;
@@ -2559,24 +2558,9 @@ PredicateLockTuple(Relation relation, HeapTuple tuple, Snapshot snapshot)
*/
if (relation->rd_index == NULL)
{
- TransactionId myxid;
-
- targetxmin = HeapTupleHeaderGetXmin(tuple->t_data);
-
- myxid = GetTopTransactionIdIfAny();
- if (TransactionIdIsValid(myxid))
- {
- if (TransactionIdFollowsOrEquals(targetxmin, TransactionXmin))
- {
- TransactionId xid = SubTransGetTopmostTransaction(targetxmin);
-
- if (TransactionIdEquals(xid, myxid))
- {
- /* We wrote it; we already have a write lock. */
- return;
- }
- }
- }
+ /* If we wrote it; we already have a write lock. */
+ if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple->t_data)))
+ return;
}
/*