Re: BUG #17257: (auto)vacuum hangs within lazy_scan_prune()
От | Peter Geoghegan |
---|---|
Тема | Re: BUG #17257: (auto)vacuum hangs within lazy_scan_prune() |
Дата | |
Msg-id | CAH2-Wzn2tggg9X6n08jiyW2VU=+wuDjh-ESo6QWnckNMDq8gDg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #17257: (auto)vacuum hangs within lazy_scan_prune() (Melanie Plageman <melanieplageman@gmail.com>) |
Ответы |
Re: BUG #17257: (auto)vacuum hangs within lazy_scan_prune()
|
Список | pgsql-bugs |
On Fri, Apr 26, 2024 at 5:56 PM Melanie Plageman <melanieplageman@gmail.com> wrote: > > On Fri, Apr 26, 2024 at 5:28 PM Peter Geoghegan <pg@bowt.ie> wrote: > > > > On Fri, Apr 26, 2024 at 4:46 PM Melanie Plageman > > <melanieplageman@gmail.com> wrote: > > > I have a more basic question. How could GlobalVisState->maybe_needed > > > going backwards cause a problem with relfrozenxid? Yes, if > > > maybe_needed goes backwards, we may not remove a tuple whose xmin/xmax > > > are older than VacuumCutoffs->OldestXmin. But, if that tuple's > > > xmin/xmax are older than OldestXmin, then wouldn't we freeze it? > > > > You can't freeze every XID older than OldestXmin. > > heap_prepare_freeze_tuple() isn't prepared for HEAPTUPLE_DEAD tuples, > > and expects that those will be taken care of by the time it is called. > > But, the tuple isn't HEAPTUPLE_DEAD -- it's HEAPTUPLE_RECENTLY_DEAD. Why? What tuple is this? > It will always be HEAPTUPLE_RECENTLY_DEAD in 17 and in <= 16, if > HeapTupleSatisfiesVacuum() returns HEAPTUPLE_DEAD, we wouldn't call > heap_prepare_freeze_tuple() because of the retry loop. The retry loop exists precisely because heap_prepare_freeze_tuple() isn't prepared to deal with HEAPTUPLE_DEAD tuples. So I agree that that won't be allowed to happen on versions that have the retry loop (14 - 16). As Andres pointed out, even if we were to call heap_prepare_freeze_tuple() with a HEAPTUPLE_DEAD tuple, we'd get a "can't happen" error (though it's hard to see this because it doesn't actually rely on the hint bits set in the tuple). -- Peter Geoghegan
В списке pgsql-bugs по дате отправления: