mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Add new replication mode synchronous_commit = 'write'.
Replication occurs only to memory on standby, not to disk, so provides additional performance if user wishes to reduce durability level slightly. Adds concept of multiple independent sync rep queues. Fujii Masao and Simon Riggs
This commit is contained in:
@@ -15,6 +15,16 @@
|
||||
|
||||
#include "utils/guc.h"
|
||||
|
||||
#define SyncRepRequested() \
|
||||
(max_wal_senders > 0 && synchronous_commit > SYNCHRONOUS_COMMIT_LOCAL_FLUSH)
|
||||
|
||||
/* SyncRepWaitMode */
|
||||
#define SYNC_REP_NO_WAIT -1
|
||||
#define SYNC_REP_WAIT_WRITE 0
|
||||
#define SYNC_REP_WAIT_FLUSH 1
|
||||
|
||||
#define NUM_SYNC_REP_WAIT_MODE 2
|
||||
|
||||
/* syncRepState */
|
||||
#define SYNC_REP_NOT_WAITING 0
|
||||
#define SYNC_REP_WAITING 1
|
||||
@@ -37,8 +47,9 @@ extern void SyncRepReleaseWaiters(void);
|
||||
extern void SyncRepUpdateSyncStandbysDefined(void);
|
||||
|
||||
/* called by various procs */
|
||||
extern int SyncRepWakeQueue(bool all);
|
||||
extern int SyncRepWakeQueue(bool all, int mode);
|
||||
|
||||
extern bool check_synchronous_standby_names(char **newval, void **extra, GucSource source);
|
||||
extern void assign_synchronous_commit(int newval, void *extra);
|
||||
|
||||
#endif /* _SYNCREP_H */
|
||||
|
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "access/xlog.h"
|
||||
#include "nodes/nodes.h"
|
||||
#include "replication/syncrep.h"
|
||||
#include "storage/latch.h"
|
||||
#include "storage/shmem.h"
|
||||
#include "storage/spin.h"
|
||||
@@ -68,15 +69,16 @@ extern WalSnd *MyWalSnd;
|
||||
typedef struct
|
||||
{
|
||||
/*
|
||||
* Synchronous replication queue. Protected by SyncRepLock.
|
||||
* Synchronous replication queue with one queue per request type.
|
||||
* Protected by SyncRepLock.
|
||||
*/
|
||||
SHM_QUEUE SyncRepQueue;
|
||||
SHM_QUEUE SyncRepQueue[NUM_SYNC_REP_WAIT_MODE];
|
||||
|
||||
/*
|
||||
* Current location of the head of the queue. All waiters should have a
|
||||
* waitLSN that follows this value. Protected by SyncRepLock.
|
||||
*/
|
||||
XLogRecPtr lsn;
|
||||
XLogRecPtr lsn[NUM_SYNC_REP_WAIT_MODE];
|
||||
|
||||
/*
|
||||
* Are any sync standbys defined? Waiting backends can't reload the
|
||||
|
Reference in New Issue
Block a user