On Thu, Dec 29, 2022 at 9:21 AM Andres Freund <and...@anarazel.de> wrote: > I do think we wanted to avoid reviving actually-dead tuples (present due to > the multixact and related bugs). And I'm worried about giving that checking > up, I've seen it hit too many times. Both in the real world and during > development.
I could just move the same tests from heap_prepare_freeze_tuple() to heap_freeze_execute_prepared(), without changing any of the details. That would mean that the TransactionIdDidCommit() calls would only take place with tuples that actually get frozen, which is more or less how it worked before now. heap_prepare_freeze_tuple() will now often prepare freeze plans that just get discarded by lazy_scan_prune(). My concern is the impact on tables/pages that almost always discard prepared freeze plans, and so require many TransactionIdDidCommit() calls that really aren't necessary. > Somewhat of a tangent: I've previously wondered if we should have a small > hash-table based clog cache. The current one-element cache doesn't suffice in > a lot of scenarios, but it wouldn't take a huge cache to end up filtering most > clog accesses. I imagine that the one-element cache works alright in some scenarios, but then suddenly doesn't work so well, even though not very much has changed. Behavior like that makes the problems difficult to analyze, and easy to miss. I'm suspicious of that. -- Peter Geoghegan