Re: Remove HeapTuple and Buffer dependency for predicate locking functions
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Ashwin Agrawal <aagrawal@pivotal.io>
Cc: Andres Freund <andres@anarazel.de>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>,
Kuntal Ghosh <kuntalghosh.2007@gmail.com>
Date: 2019-11-08T04:43:46Z
Lists: pgsql-hackers
Attachments
- v3-0001-Optimize-TransactionIdIsCurrentTransactionId.patch (application/octet-stream) patch v3-0001
- v3-0002-Optimize-PredicateLockTuple.patch (application/octet-stream) patch v3-0002
- v3-0003-Remove-HeapTuple-dependency-for-predicate-locking.patch (application/octet-stream) patch v3-0003
On Thu, Aug 8, 2019 at 6:53 AM Ashwin Agrawal <aagrawal@pivotal.io> wrote: >>> - I wonder if CheckForSerializableConflictOutNeeded() shouldn't have a >>> portion of it's code as a static inline. In particular, it's a shame >>> that we currently perform external function calls at quite the >>> frequency when serializable isn't even in use. >> >> I am not sure on portion of the code part? SerializationNeededForRead() is static inline function in C file. Can't inline CheckForSerializableConflictOutNeeded() without moving SerializationNeededForRead() and some other variables to header file. CheckForSerializableConflictOut() wasn't inline either, so a function call was performed earlier as well when serializable isn't even in use. I agree that it's strange that we do these high frequency function calls just to figure out that we're not even using this stuff, which ultimately comes down to the static global variable MySerializableXact being not reachable from (say) an inline function defined in a header. That's something to look into in another thread. > Attaching re-based version of the patches on top of current master, which has the fix for HOT serializable predicate locking bug spotted by Andres committed now. I'm planning to commit these three patches on Monday. I've attached versions with whitespace-only changes from pgindent, and commit messages lightly massaged and updated to point to this discussion and reviewers.
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