Thread: read transaction and sync rep

read transaction and sync rep

From
Fujii Masao
Date:
Hi,

I found that even read transaction waits for sync rep when it generates
WAL records even if XID is not assigned. For example, imagine the case
where SELECT query does a heap clean operation and generates
XLOG_HEAP2_CLEAN record. ISTM that such a read transaction doesn't
need to wait for sync rep because that's not visible to the client... Can
we skip waiting for sync rep if XID is not assigned?

Regards,

-- 
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center


Re: read transaction and sync rep

From
Simon Riggs
Date:
On Fri, Jan 13, 2012 at 11:30 AM, Fujii Masao <masao.fujii@gmail.com> wrote:

> I found that even read transaction waits for sync rep when it generates
> WAL records even if XID is not assigned. For example, imagine the case
> where SELECT query does a heap clean operation and generates
> XLOG_HEAP2_CLEAN record. ISTM that such a read transaction doesn't
> need to wait for sync rep because that's not visible to the client... Can
> we skip waiting for sync rep if XID is not assigned?

Your example of XLOG_HEAP2_CLEAN records is a good one but there are
other record types and circumstances, as described in the comment near
the top of RecordTransactionCommit
    /*     * If we didn't create XLOG entries, we're done here; otherwise we     * should flush those entries the same
asa commit record.    (An     * example of a possible record that wouldn't cause an XID to be     * assigned is a
sequenceadvance record due to nextval() --- we want     * to flush that to disk before reporting commit.)     */    if
(!wrote_xlog)       goto cleanup; 

Perhaps there is a case to say that sequences don't need to be flushed
if all they did was do nextval but no change was associated with that,
I'm not sure.

So I think there is a case for optimisation using finer grained decision making.

--
 Simon Riggs                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Re: read transaction and sync rep

From
Jeff Janes
Date:
On Fri, Jan 13, 2012 at 3:44 AM, Simon Riggs <simon@2ndquadrant.com> wrote:
> On Fri, Jan 13, 2012 at 11:30 AM, Fujii Masao <masao.fujii@gmail.com> wrote:
>
>> I found that even read transaction waits for sync rep when it generates
>> WAL records even if XID is not assigned. For example, imagine the case
>> where SELECT query does a heap clean operation and generates
>> XLOG_HEAP2_CLEAN record. ISTM that such a read transaction doesn't
>> need to wait for sync rep because that's not visible to the client... Can
>> we skip waiting for sync rep if XID is not assigned?

I think this applies not only to sync rep, but also the xlog sync on
the master as well.
That is, the transaction could just commit asynchronously.

> Your example of XLOG_HEAP2_CLEAN records is a good one but there are
> other record types and circumstances, as described in the comment near
> the top of RecordTransactionCommit
>
>                /*
>                 * If we didn't create XLOG entries, we're done here; otherwise we
>                 * should flush those entries the same as a commit record.      (An
>                 * example of a possible record that wouldn't cause an XID to be
>                 * assigned is a sequence advance record due to nextval() --- we want
>                 * to flush that to disk before reporting commit.)
>                 */
>                if (!wrote_xlog)
>                        goto cleanup;
>
> Perhaps there is a case to say that sequences don't need to be flushed
> if all they did was do nextval but no change was associated with that,
> I'm not sure.

I think there that that is the case.  If one wants to argue that
someone could take the sequence value and do something with it outside
the database and so that sequence can't be repeated after recovery,
then the commit is the wrong place to make that argument.  The flush
would have to occur before the value is handed out, not before the
transaction which obtained the value commits.

Cheers,

Jeff