Re: Remove HeapTuple and Buffer dependency for predicate locking functions
Kuntal Ghosh <kuntalghosh.2007@gmail.com>
From: Kuntal Ghosh <kuntalghosh.2007@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Ashwin Agrawal <aagrawal@pivotal.io>,
Thomas Munro <thomas.munro@gmail.com>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2019-08-01T06:01:32Z
Lists: pgsql-hackers
On Thu, Aug 1, 2019 at 2:36 AM Andres Freund <andres@anarazel.de> wrote: > > > > > > > > I think the only part its doing for sub-transaction is > > > > SubTransGetTopmostTransaction(xid). If xid passed to this function is > > > > already top most transaction which is case for zheap and zedstore, then > > > > there is no downside to keeping that code here in common place. > > > > > > Well, it's far from a cheap function. It'll do unnecessary on-disk > > > lookups in many cases. I'd call that quite a downside. > > > > > > > Okay, agree, its costly function and better to avoid the call if possible. > > > > Instead of moving the handling out of the function, how do feel about > > adding boolean isTopTransactionId argument to function > > CheckForSerializableConflictOut(). The AMs, which implicitly know, only > > pass top transaction Id to this function, can pass true and avoid the > > function call to SubTransGetTopmostTransaction(xid). With this > > subtransaction code remains in generic place and AMs intending to use it > > continue to leverage the common code, plus explicitly clarifies the > > behavior as well. > > Looking at the code as of master, we currently have: > > - PredicateLockTuple() calls SubTransGetTopmostTransaction() to figure > out a whether the tuple has been locked by the current > transaction. That check afaict just should be > TransactionIdIsCurrentTransactionId(), without all the other > stuff that's done today. > Yeah. this is the only part where predicate locking uses the subxids. Since, predicate locking always use the top xid, IMHO, it'll be good to make this api independent of subxids. > TransactionIdIsCurrentTransactionId() imo ought to be optimized to > always check for the top level transactionid first - that's a good bet > today, but even moreso for the upcoming AMs that won't have separate > xids for subtransactions. Alternatively we shouldn't make that a > binary search for each subtrans level, but just have a small > simplehash hashtable for xids. A check for top transaction id first and usage of simple sound like good optimizations. But, I'm not sure whether these changes should be part of this patch or a separate one. -- Thanks & Regards, Kuntal Ghosh EnterpriseDB: http://www.enterprisedb.com
Commits
-
Remove dependency on HeapTuple from predicate locking functions.
- 6f38d4dac381 13.0 landed
-
Optimize PredicateLockTuple().
- db2687d1f378 13.0 landed
-
Optimize TransactionIdIsCurrentTransactionId().
- 695c5977c8bc 13.0 landed
-
Fix predicate-locking of HOT updated rows.
- 54c98fa71ac1 9.4.25 landed
- fd298cd6394b 9.5.20 landed
- 75774cc221e5 9.6.16 landed
- 65468cc705ea 10.11 landed
- c5b796125299 11.6 landed
- f8d30182b121 12.0 landed
- 1169fcf129f4 13.0 landed
-
Introduce logical decoding.
- b89e151054a0 9.4.0 cited
-
Fix bugs in SSI tuple locking.
- 81fbbfe3352d 9.4.0 cited
-
Implement genuine serializable isolation level.
- dafaa3efb75c 9.1.0 cited