Re: freeze cannot be finished

From: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
To: Миша Тюрин <tmihail(at)bk(dot)ru>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, Sergey Burladyan <eshkinkot(at)gmail(dot)com>
Subject: Re: freeze cannot be finished
Date: 2013-11-18 08:32:46
Message-ID: 5289D0AE.20707@vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Committed, thanks for the report!

On 16.11.2013 22:05, Миша Тюрин wrote:
> Hello!
>
> Could anyone review patch suggested by Jeff Janes ?
>
> Initial thread http://www.postgresql.org/message-id/flat/1384356585.995240612%40f50.i.mail.ru
>
> Thanks in advance!
>
>>
>> On Wed, Nov 13, 2013 at 3:53 PM, Sergey Burladyan < eshkinkot(at)gmail(dot)com > wrote:
>>> Jeff Janes < jeff(dot)janes(at)gmail(dot)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.
>>
>> Yeah, I think that that is a bug. If the clean-up lock is unavailable but the page is inspected without it and found not to need freezing, then the page needs to be counted as scanned, but is not so counted.
>>
>> commit bbb6e559c4ea0fb4c346beda76736451dc24eb4e
>> Date: Mon Nov 7 21:39:40 2011 -0500
>>
>> But this was introduced in 9.2.0, so unless the OP didn't upgrade to 9.2 until recently, I don't know why it just started happening.
>>
>> It looks like a simple fix (to HEAD attached), but I don't know how to test it.
>>
>> Also, it seem like it might be worth issuing a warning if scan_all is true but all was not scanned.
>>
>> Cheers,
>>
>> Jeff
>>
>> --
>> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
>> To make changes to your subscription:
>> https://urldefense.proofpoint.com/v1/url?u=http://www.postgresql.org/mailpref/pgsql-general&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=xGch4oNJbpD%2BKPJECmgw4SLBhytSZLBX7UnkZhtNcpw%3D%0A&m=n4tu%2Fhw2DBAVCLO0UwZqdJsniWyqjnPt3OK%2FqepXInw%3D%0A&s=ffa1f6d45b713d12b320b72a4f417015498f57305664de0da209dc32f5e8a63b
>
>>
>
> --
>
>
>
>

--
- Heikki

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Heikki Linnakangas 2013-11-18 08:40:16 Re: Sequence Access Method WIP
Previous Message Albe Laurenz 2013-11-18 08:28:31 Re: writable FDWs / update targets confusion