From: | Simon Riggs <simon(at)2ndQuadrant(dot)com> |
---|---|
To: | Noah Misch <noah(at)leadboat(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: lazy_vacuum_heap()'s removal of HEAPTUPLE_DEAD tuples |
Date: | 2013-01-10 02:45:36 |
Message-ID: | CA+U5nMKBrqFxyohr=JSDpgxZ6y0nfAdmt=K3hK4Zzfqo1MHSJg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 8 January 2013 02:49, Noah Misch <noah(at)leadboat(dot)com> wrote:
> There is a bug in lazy_scan_heap()'s
> bookkeeping for the xid to place in that WAL record. Each call to
> heap_page_prune() simply overwrites vacrelstats->latestRemovedXid, but
> lazy_scan_heap() expects it to only ever increase the value. I have a
> attached a minimal fix to be backpatched. It has lazy_scan_heap() ignore
> heap_page_prune()'s actions for the purpose of this conflict xid, because
> heap_page_prune() emitted an XLOG_HEAP2_CLEAN record covering them.
Interesting. Yes, bug, and my one of mine also.
ISTM the right fix is fix to correctly initialize on pruneheap.c line 176
prstate.latestRemovedXid = *latestRemovedXid;
better to make it work than to just leave stuff hanging.
I very much like your patch to remove all that cruft altogether; good
riddance. I think you're missing removing a few calls to
HeapTupleHeaderAdvanceLatestRemovedXid(), perhaps even that routine as
well.
Not sure about the skipping WAL records and share locking part, that's
too radical for me.
--
Simon Riggs http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Simon Riggs | 2013-01-10 02:48:23 | Re: Index build temp files |
Previous Message | Noah Misch | 2013-01-10 02:36:55 | Re: Index build temp files |