Synchronization levels in SR - Mailing list pgsql-hackers

From Fujii Masao
Subject Synchronization levels in SR
Date
Msg-id AANLkTilpt3_jm4HYeGcZgYd_GUvh8sO02Do583tFkB_z@mail.gmail.com
Whole thread Raw
Responses Re: Synchronization levels in SR
Re: Synchronization levels in SR
Re: Synchronization levels in SR
Re: Synchronization levels in SR
List pgsql-hackers
Hi,

I'm now designing the "synchronous" replication feature based on
SR for 9.1, while discussing that at another thread.
http://archives.postgresql.org/pgsql-hackers/2010-04/msg01516.php

At the first design phase, I'd like to clarify which synch levels
should be supported 9.1 and how it should be specified by users.

The log-shipping replication has some synch levels as follows.
  The transaction commit on the master  #1 doesn't wait for replication (already suppored in 9.0)  #2 waits for WAL to
bereceived by the standby  #3 waits for WAL to be received and flushed by the standby  #4 waits for WAL to be received,
flushedand replayed by     the standby  ..etc?
 

Which should we include in 9.1? I'd like to add #2 and #3.
They are enough for high-availability use case (i.e., to
prevent failover from losing any transactions committed).
AFAIR, MySQL semi-synchronous replication supports #2 level.

#4 is useful for some cases, but might often make the
transaction commit on the master get stuck since read-only
query can easily block recovery by the lock conflict. So
#4 seems not to be worth working on until that HS problem
has been addressed. Thought?

Second, we need to discuss about how to specify the synch
level. There are three approaches:

* Per standby Since the purpose, location and H/W resource often differ from one standby to another, specifying level
perstandby (i.e., we set the level in recovery.conf) is a straightforward approach, I think. For example, we can choose
#3for high-availability standby near the master, and choose #1 (async) for the disaster recovery standby remote.
 

* Per transaction Define the PGC_USERSET option specifying the level and specify it on the master in response to the
purposeof transaction. In this approach, for example, we can choose #4 for the transaction which should be visible on
thestandby as soon as a "success" of the commit has been returned to a client. We can also choose #1 for time-critical
butnot mission-critical transaction.
 

* Mix Allow users to specify the level per standby and transaction at the same time, and then calculate the real level
fromthem by using some algorithm.
 

Which should we adopt for 9.1? I'd like to implement the
"per-standby" approach at first since it's simple and seems
to cover more use cases. Thought?

Regards,

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


pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: ExecutorCheckPerms() hook
Next
From: Robert Haas
Date:
Subject: Re: Stefan's bug (was: max_standby_delay considered harmful)