Re: freeze cannot be finished - Mailing list pgsql-general

From Sergey Burladyan
Subject Re: freeze cannot be finished
Date
Msg-id 87txffkgeq.fsf@home.progtech.ru
Whole thread Raw
In response to Re: freeze cannot be finished  (Jeff Janes <jeff.janes@gmail.com>)
Responses Re: freeze cannot be finished
List pgsql-general
Jeff Janes <jeff.janes@gmail.com> writes:

If I not mistaken, looks like lazy_scan_heap() called from lazy_vacuum_rel()
(see [1]) skip pages, even if it run with scan_all == true, lazy_scan_heap()
does not increment scanned_pages if lazy_check_needs_freeze() return false, so
if this occurred at wraparound vacuum it cannot update pg_class, because
pg_class updated via this code:

    new_frozen_xid = FreezeLimit;
    if (vacrelstats->scanned_pages < vacrelstats->rel_pages)
        new_frozen_xid = InvalidTransactionId;

    vac_update_relstats(onerel,
                        new_rel_pages,
                        new_rel_tuples,
                        new_rel_allvisible,
                        vacrelstats->hasindex,
                        new_frozen_xid);

so i think in our prevent wraparound vacuum vacrelstats->scanned_pages always
less than vacrelstats->rel_pages and pg_class relfrozenxid never updated.

[1] src/backend/commands/vacuumlazy.c

--
Sergey Burladyan


pgsql-general by date:

Previous
From: David Johnston
Date:
Subject: Re: expression index not used within function
Next
From: Jeff Janes
Date:
Subject: Re: freeze cannot be finished