Can we just log the change of VM in log_heap_clean() for redo?
Thanks

--
GaoZengqi
pgf...@gmail.com
zengqi...@gmail.com


On Tue, Nov 23, 2010 at 3:24 AM, Robert Haas <robertmh...@gmail.com> wrote:

> On Mon, Jun 14, 2010 at 1:19 AM, Heikki Linnakangas
> <heikki.linnakan...@enterprisedb.com> wrote:
> >> I *think* that the answer to this parenthesized question is "no".
> >> When we vacuum a page, we set the LSN on both the heap page and the
> >> visibility map page.  Therefore, neither of them can get written to
> >> disk until the WAL record is flushed, but they could get flushed in
> >> either order.  So the visibility map page could get flushed before the
> >> heap page, as the non-parenthesized portion of the comment indicates.
> >
> > Right.
> >
> >> However, at least in theory, it seems like we could fix this up during
> >> redo.
> >
> > Setting a bit in the visibility map is currently not WAL-logged, but yes
> > once we add WAL-logging, that's straightforward to fix.
>
> Eh, so.  Suppose - for the sake of argument - we do the following:
>
> 1. Allocate an additional infomask(2) bit that means "xmin is frozen,
> no need to call XidInMVCCSnapshot()".  When we freeze a tuple, we set
> this bit in lieu of overwriting xmin.  Note that freezing pages is
> already WAL-logged, so redo is possible.
>
> 2. Modify VACUUM so that, when the page is observed to be all-visible,
> it will freeze all tuples on the page, set PD_ALL_VISIBLE, and set the
> visibility map bit, writing a single XLOG record for the whole
> operation (possibly piggybacking on XLOG_HEAP2_CLEAN if the same
> vacuum already removed tuples; otherwise and/or when no tuples were
> removed writing XLOG_HEAP2_FREEZE or some new record type).  This
> loses no forensic information because of (1).  (If the page is NOT
> observed to be all-visible, we freeze individual tuples only when they
> hit the current age thresholds.)
>
> Setting the visibility map bit is now crash-safe.
>
> Please poke holes.
>
> --
> Robert Haas
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>

Reply via email to