Re: XLOG_NO_TRAN and XLogRecord.xl_xid

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: XLOG_NO_TRAN and XLogRecord.xl_xid
Дата
Msg-id 45DDBC05.6060409@enterprisedb.com
обсуждение исходный текст
Ответ на XLOG_NO_TRAN and XLogRecord.xl_xid  ("Florian G. Pflug" <fgp@phlo.org>)
Ответы Re: XLOG_NO_TRAN and XLogRecord.xl_xid
Re: XLOG_NO_TRAN and XLogRecord.xl_xid
Список pgsql-hackers
Florian G. Pflug wrote:
> Hi
> 
> After futher reading I fear I have to bother you with another question ;-)
> There is a flag XLOG_NO_TRAN passed via the info parameter to XLogInsert.
> 
> Now, for example the following comment in clog.c
> /*
>  * Write a TRUNCATE xlog record
>  *
>  * We must flush the xlog record to disk before returning --- see notes
>  * in TruncateCLOG().
>  *
>  * Note: xlog record is marked as outside transaction control, since we
>  * want it to be redone whether the invoking transaction commits or not.
>  */
> static void
> WriteTruncateXlogRec(int pageno)
> ...
> 
> seems to imply that (some?) wal redoe records only actually get redone
> if the transaction that caused them eventually comitted. But given the
> way postgres MVCC works that doesn't make sense to me, and I also can't
> find any code that would actually skip xlog entries.

That comment is a bit misleading, I agree. We don't skip xlog entries, 
they're always replayed.

The xid in the WAL record is used by some WAL resource managers to 
reconstruct the original data. For that purpose, it might as well not be 
in the header, but in the data portion.

It's also used in PITR to recover up to a certain transaction, and it's 
used to advance the next xid counter to the next unused xid after replay.

> On a related note - Looking at e.g. heap_xlog_insert, it seems that
> the orginal page (before the crash), and the one reconstructed via
> heap_xlog_insert are "only" functionally equivalent, but not the same
> byte-wise? At least this is what doing
> HeapTupleHeaderSetCmin(htup, FirstCommandId);
> seems to imply - surely the original command id could have been higher, no?

Yep, that's right. The reconstructed page is not always byte-to-byte 
identical to the original.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Florian G. Pflug"
Дата:
Сообщение: XLOG_NO_TRAN and XLogRecord.xl_xid
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: XLOG_NO_TRAN and XLogRecord.xl_xid