Synchronous Commit

Synchronous Commit#

Commit scope kind: SYNCHRONOUS COMMIT

Overview#

PGD’s SYNCHRONOUS COMMIT is a commit scope kind that works in a way that’s more like PostgreSQL’s synchronous_commit option in its underlying operation. Unlike the PostgreSQL option, though, it’s configured as a commit scope and is easier to configure and interact with in PGD.

Unlike other commit scope kinds, such as GROUP COMMIT and CAMO , the transactions in a SYNCHRONOUS COMMIT operation aren’t transformed into a two-phase commit (2PC) transaction. They work more like a Postgres synchronous_commit .

Example#

In this example, when this commit scope is in use, any node in the left_dc group uses SYNCHRONOUS COMMIT to replicate changes to the other nodes in the left_dc group. It looks for a majority of nodes in the left_dc group to confirm that they committed the transaction.

SELECT bdr.create_commit_scope(
    commit_scope_name := example_sc_scope,
    origin_node_group := left_dc,
    rule := MAJORITY (left_dc) SYNCHRONOUS COMMIT,
    wait_for_ready := true
);

Configuration#

SYNCHRONOUS COMMIT supports the optional DEGRADE ON clause. See the SYNCHRONOUS COMMIT commit scope reference for specific configuration parameters or see Degrading commit scope rules regarding Degrade on options.

Confirmation#

Confirmation level

PGD Synchronous Commit handling

received

A remote PGD node confirms the transaction once it's been fully received and is in the in-memory write queue.

replicated

Same behavior as received.

durable

Confirms the transaction after all of its changes are flushed to disk. Analogous to synchronous_commit = on in legacy synchronous replication.

visible (default)

Confirms the transaction after all of its changes are flushed to disk and it's visible to concurrent transactions. Analogous to synchronous_commit = remote_apply in legacy synchronous replication.

Details#

Currently SYNCHRONOUS COMMIT doesn’t use the confirmation levels of the commit scope rule syntax.

In commit scope rules, the original keyword SYNCHRONOUS_COMMIT is now aliased to SYNCHRONOUS COMMIT . The use of a space instead of an underscore helps distinguish it from Postgres’s native SYNCHRONOUS_COMMIT .