mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Make walsender more responsive.
Per testing by Andres Freund, this improves replication performance and reduces replication latency and latency jitter. I was a bit concerned about moving more work into XLogInsert, but testing seems to show that it's not a problem in practice. Along the way, improve comments for WaitLatchOrSocket. Andres Freund. Review and stylistic cleanup by me.
This commit is contained in:
@@ -21,6 +21,7 @@ extern bool am_walsender;
|
||||
extern bool am_cascading_walsender;
|
||||
extern volatile sig_atomic_t walsender_shutdown_requested;
|
||||
extern volatile sig_atomic_t walsender_ready_to_stop;
|
||||
extern bool wake_wal_senders;
|
||||
|
||||
/* user-settable parameters */
|
||||
extern int max_wal_senders;
|
||||
@@ -35,4 +36,27 @@ extern void WalSndRqstFileReload(void);
|
||||
|
||||
extern Datum pg_stat_get_wal_senders(PG_FUNCTION_ARGS);
|
||||
|
||||
/*
|
||||
* Remember that we want to wakeup walsenders later
|
||||
*
|
||||
* This is separated from doing the actual wakeup because the writeout is done
|
||||
* while holding contended locks.
|
||||
*/
|
||||
#define WalSndWakeupRequest() \
|
||||
do { wake_wal_senders = true; } while (0)
|
||||
|
||||
/*
|
||||
* wakeup walsenders if there is work to be done
|
||||
*/
|
||||
#define WalSndWakeupProcessRequests() \
|
||||
do \
|
||||
{ \
|
||||
if (wake_wal_senders) \
|
||||
{ \
|
||||
wake_wal_senders = false; \
|
||||
if (max_wal_senders > 0) \
|
||||
WalSndWakeup(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#endif /* _WALSENDER_H */
|
||||
|
Reference in New Issue
Block a user