v3-0002-Optimize-PredicateLockTuple.patch
application/octet-stream
Filename: v3-0002-Optimize-PredicateLockTuple.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v3-0002
Subject: Optimize PredicateLockTuple().
| File | + | − |
|---|---|---|
| src/backend/storage/lmgr/predicate.c | 3 | 18 |
From e73abc40fc6bbc087bbcaa109ef6c5b2fe642853 Mon Sep 17 00:00:00 2001
From: Ashwin Agrawal <aagrawal@pivotal.io>
Date: Fri, 2 Aug 2019 15:21:16 -0700
Subject: [PATCH v3 2/3] Optimize PredicateLockTuple().
PredicateLockTuple() has a fast exit if tuple was written by current
transaction, as for that case it already has a lock. This check can
be performed using TransactionIdIsCurrentTransactionId() instead of
using SubTransGetTopmostTransaction(). Since
TransactionIdIsCurrentTransactionId() is an all-in-memory operation,
it makes this efficient compared to SubTransGetTopmostTransaction(),
which can hit the disk.
This simplification was proposed by Andres Freund.
Author: Ashwin Agrawal
Reviewed-by: Thomas Munro
Discussion: https://postgr.es/m/CALfoeiv0k3hkEb3Oqk%3DziWqtyk2Jys1UOK5hwRBNeANT_yX%2Bng%40mail.gmail.com
---
src/backend/storage/lmgr/predicate.c | 21 +++------------------
1 file changed, 3 insertions(+), 18 deletions(-)
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 78fb90fb1b..d5468b3e29 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -2559,24 +2559,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;
}
/*
--
2.23.0