Used optimized linear search in more code paths
commit14ff44f80c09718d43d853363941457f5468cc03
authorMichael Paquier <michael@paquier.xyz>
Thu, 22 Sep 2022 00:47:28 +0000 (22 09:47 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 22 Sep 2022 00:47:28 +0000 (22 09:47 +0900)
tree4d948813b488f91c9142211776fcf7e61169a134
parent9a6915257d1d804ddba05331030b74d7426a4005
Used optimized linear search in more code paths

This commit updates two code paths to use pg_lfind32() introduced by
b6ef167 with TransactionId arrays:
- At the end of TransactionIdIsInProgress(), when checking for the case
of still running but overflowed subxids.
- XidIsConcurrent(), when checking for a serializable conflict.

These cases are less impactful than 37a6e5d, but a bit of
micro-benchmarking of this API shows that linear search speeds up by
~20% depending on the number of items involved (x86_64 and amd64 looked
at here).

Author: Nathan Bossart
Reviewed-by: Richard Guo, Michael Paquier
Discussion: https://postgr.es/m/20220901185153.GA783106@nathanxps13
src/backend/storage/ipc/procarray.c
src/backend/storage/lmgr/predicate.c