Re: Correcting freeze conflict horizon calculation
От | Peter Geoghegan |
---|---|
Тема | Re: Correcting freeze conflict horizon calculation |
Дата | |
Msg-id | CAH2-Wzmm3QyKDJkWUruvTAQiCTP0qae_e8yxB0h7gt9CwaZ_Zg@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Correcting freeze conflict horizon calculation
Re: Correcting freeze conflict horizon calculation |
Список | pgsql-hackers |
On Thu, May 29, 2025 at 10:57 AM Melanie Plageman <melanieplageman@gmail.com> wrote: > However, we calculate the snapshot conflict horizon for the > prune/freeze record in master/17 and the freeze record in 16 before > updating all-frozen and all-visible. That means the horizon may be too > aggressive if the page cannot actually be set all-frozen. This isn't a > correctness issue, but it may lead to transactions on the standby > being unnecessarily canceled for pages which have some tuples frozen > but not all due to remaining LP_DEAD items. I don't follow. Your concern is that the horizon might be overly aggressive/too conservative. But your patch (for 16) makes us take the don't-use-snapshotConflictHorizon-twice block *less* frequently (and the "use OldestXmin conservatively" block *more* frequently): - if (prunestate->all_visible && prunestate->all_frozen) + if (prunestate->all_visible && prunestate->all_frozen && lpdead_items == 0) { /* Using same cutoff when setting VM is now unnecessary */ snapshotConflictHorizon = prunestate->visibility_cutoff_xid; prunestate->visibility_cutoff_xid = InvalidTransactionId; } else { /* Avoids false conflicts when hot_standby_feedback in use */ snapshotConflictHorizon = vacrel->cutoffs.OldestXmin; TransactionIdRetreat(snapshotConflictHorizon); } How can taking the "Avoids false conflicts when hot_standby_feedback in use" path more often result in fewer unnecessary conflicts on standbys? Isn't it the other way around? -- Peter Geoghegan
В списке pgsql-hackers по дате отправления: