Re: BUG #17485: Records missing from Primary Key index when doing REINDEX INDEX CONCURRENTLY
x4mmm@yandex-team.ru
From: Andrey Borodin <x4mmm@yandex-team.ru>
To: Andres Freund <andres@anarazel.de>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, Peter Geoghegan <pg@bowt.ie>, Michael Paquier <michael@paquier.xyz>, Петър Славов <pet.slavov@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2022-05-25T04:00:47Z
Lists: pgsql-bugs
> On 25 May 2022, at 00:01, Andres Freund <andres@anarazel.de> wrote: > >>> On 24 May 2022, at 23:15, Andres Freund <andres@anarazel.de> wrote: >>> >>> I suspect the problem might be related to pruning done during the validation >>> scan. Once PROC_IN_SAFE_IC is set, the backend itself will not preserve tids >>> its own snapshot might need. Which will wreak havoc during the validation >>> scan. >> >> I observe that removing PROC_IN_SAFE_IC for index_validate() fixes tests. >> But why it's not a problem for index_build() scan? > > I now suspect it's a problem for both, just more visible for index_validate(). No, I understood now. index_build() in CIC can be safely replaced by index_build_empty(). index_build() is only called because many AMs can make index more efficient than index_build_empty()+inserts. BTW for other indexes that are built just by inserts we can safely optimize CIC by calling index_build_empty() instead of index_build() in Phase 1. >> And I do not understand why it's a problem that tuple is pruned during the scan... How does this "wreak havoc" happen? > > Basically snapshots don't work anymore I got it! (almost) Thank you! Now I see why tests in 002_cic.pl did not catch that: there were no HOT updates. So, can we leave the feature enabled for all the process besides index validation? We don't seem to need a valid snapshot in CIC anywhere else. Or it's safer to revert whole commit? Thanks! Best regards, Andrey Borodin.
Commits
-
Revert changes to CONCURRENTLY that "sped up" Xmin advance
- e28bb8851969 15.0 landed
- 042b584c7f7d 14.4 landed
-
Fix possible HOT corruption when RECENTLY_DEAD changes to DEAD while pruning.
- 18b87b201f73 15.0 cited