Re: XLog: how to log? - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: XLog: how to log?
Date
Msg-id 20040511212600.GA5878@dcc.uchile.cl
Whole thread Raw
In response to Re: XLog: how to log?  (Simon Riggs <simon@2ndquadrant.com>)
Responses Re: XLog: how to log?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: XLog: how to log?  (Simon Riggs <simon@2ndquadrant.com>)
Re: XLog: how to log?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Tue, May 11, 2004 at 09:25:37PM +0100, Simon Riggs wrote:
> On Tue, 2004-05-11 at 16:33, Bruce Momjian wrote:
> > Tom Lane wrote:
> > > Alvaro Herrera <alvherre@dcc.uchile.cl> writes:
> > > > Hmm ... I think it should be forbidden to quote a subtrans Xid as
> > > > rollforward point.  Not sure if that can be done though, or how to do
> > > > it.
> > > 
> > > Seems like a nonissue, unless the XLOG trace makes a subtrans look the
> > > same as a main trans, which it'd not do would it?
> 
> I agree that a subtrans xid should not be a valid rollforward point.

If you try to do that you'll fail because there will be no XLog record
signalling the commit of a subtransaction.  They will be marked
committed as necessary as a subproduct of main transaction committing.


> Currently, recovery loops until end of xlogs. There is no exit condition
> from the loop. There is not currently a timestamp on the xlogs -
> anywhere apart from the file date on each xlog.

Both xact commit and abort have timestamps in the XLog.  I think valid
recovery points are transaction commit/abort, not transaction start.


> If we go searching for a particular Xid, there is no way to tell whether
> an Xid suggested by a user is too big or too small for use as a recovery
> target. We need to recover - it is the only way to tell; if we find an
> Xid that matches, we stop. If not, we keep going until end of logs, when
> we need to issue a "recovered fully - the Xid you gave was not valid",
> which may take some time and is also very clearly not what was wanted.

I think the user should first examine the logs with whatever tools are
provided, and use a timestamp or a Xid listed in the XLog.  If they use
a Xid that's not listed, it's not our fault ...


> b) later, a utility that allowed xlogs to be inspected to allow DBA to
> decide which is the correct Xid to recover to.

Why is this difficult?  There are lots of subsys_desc() functions which
already returns what's in each log record as a string.  The tool could
initially just dump that ...


> Therefore: action on me? - add a timestamp to EACH xlog record -
> something I had been shying away from.

You only need timestamps in xl_xact_commit and xl_xact_abort, which are
already there.

> On Tue, 2004-05-11 at 14:56, Alvaro Herrera wrote: 
> > (Unrelated: note that after main transaction commit, a committed
> > subtransaction is indistinguishable from a committed main transaction --
> > and with the current idea of XLog I have, after recovering a transaction
> > tree from XLog there won't be any mark in pg_subtrans.  So the system
> > will not be exactly as it was before but it won't matter.)
> 
> I don't think we need a subtrans commit directly, since if the top-level
> commits after the subtrans has committed, then we're good. 

If the subxact wrote a tuple, its Xid has to be in the pg_clog.  Thus
we need to recover the pg_clog write.

> However, if a subtrans aborts, yet the top-level commits there will be
> data written to the database about an aborted transaction. We don't have
> Undo, so the subtrans clog must be updated to show that the subtrans
> aborted, otherwise we would read both the committed (top-level) and the
> uncommitted data (subtrans).

If the aborted subxact wrote a tuple, its Xid has to be in the pg_clog.

> Another way of putting it - if it was worth writing before a crash, it
> is worth recovering after a crash. Surely?

Right.  What I was saying is that we don't need pg_subtrans info,
because that's only needed while the subtransaction is marked as
"subcommitted" but it's parent hasn't committed or aborted yet.  The
subcommitted status is changed to committed/aborted when the main
transaction commits or aborts; at recovery time, we already know if that
happenned or not so we can mark it right away.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"La vida es para el que se aventura"


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: PITR Signalling the Archiver
Next
From: Gaetano Mendola
Date:
Subject: invalid memory alloc request size 0