Re: Implement waiting for wal lsn replay: reloaded
От
Xuneng Zhou
Тема
Re: Implement waiting for wal lsn replay: reloaded
Дата
Msg-id
CABPTF7V1GqXRe9Kyiw=oyDoUU4Oss49nMBhco12V7xb72P6WvQ@mail.gmail.com
Ответ на
Re: Implement waiting for wal lsn replay: reloaded (Xuneng Zhou)
Список
Дерево обсуждения
Re: Implement waiting for wal lsn replay: reloaded Yura Sokolov <y.sokolov@postgrespro.ru>
Re: Implement waiting for wal lsn replay: reloaded Tomas Vondra <tomas@vondra.me>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Chao Li <li.evan.chao@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Tomas Vondra <tomas@vondra.me>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Chao Li <li.evan.chao@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Chao Li <li.evan.chao@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Álvaro Herrera <alvherre@kurilemu.de>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Thomas Munro <thomas.munro@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Tom Lane <tgl@sss.pgh.pa.us>
Re: Implement waiting for wal lsn replay: reloaded Tom Lane <tgl@sss.pgh.pa.us>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Heikki Linnakangas <hlinnaka@iki.fi>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Andres Freund <andres@anarazel.de>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Lakhin <exclusion@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Xuneng Zhou <xunengzhou@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded Alexander Korotkov <aekorotkov@gmail.com>
Re: Implement waiting for wal lsn replay: reloaded vignesh C <vignesh21@gmail.com>
On Mon, Jul 6, 2026 at 9:49 PM Xuneng Zhou wrote: > > Hi Heikki, > > Thanks for looking into this! > > On Mon, Jul 6, 2026 at 7:04 PM Heikki Linnakangas wrote: > /* > > > * Apply the record > > > */ > > > ApplyWalRecord(xlogreader, record, &replayTLI); > > > > > > /* > > > * Wake up processes waiting for standby replay, write, or flush > > > * LSN to reach current replay position. Replay implies that the > > > * WAL was already written and flushed to disk, so write and flush > > > * waiters can be woken at the replay position too. > > > */ > > > WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_REPLAY, > > > XLogRecoveryCtl->lastReplayedEndRecPtr); > > > WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_WRITE, > > > XLogRecoveryCtl->lastReplayedEndRecPtr); > > > WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_FLUSH, > > > XLogRecoveryCtl->lastReplayedEndRecPtr); > > > > That's not wrong, but I've got some comments: > > > > 1. It's reading XLogRecoveryCtl->lastReplayedEndRecPtr without a lock or > > atomics. That's ok, no other process modifies lastReplayedEndRecPtr, but > > it feels a little dirty. > > > > 2. We're now doing three extra function calls on every WAL record. This > > is a very hot path, and most of the time, we'll just take the fast path > > in WaitLSNWakeup to return without doing anything. Andres and others > > assumed up-thread that it's negligible (we used to have pre-checks here > > in the caller), but I wonder if you did any performance testing? > > Agreed, this is a hot path. The performance impact of these extra > calls doing real work hasn't been measured yet. I'll do some testing. > > > 3. There are other "wakeup" calls inside ApplyWalRecord(), to wake up > > walsenders and walreceivers. They could perhaps use the same wait-lsn > > machinery now, but that's v20 material. However, I think these > > WaitLSNWakeup() calls should also be moved inside ApplyWalRecord(), so > > that we'd have all the wakeup actions in one place. > > + 1. This makes the code safer and more readable. > > > 4. Once you move those calls inside ApplyWalRecord(), like this: > > > > > @@ -1979,20 +1979,30 @@ ApplyWalRecord(XLogReaderState *xlogreader, XLogRecord *record, TimeLineID *repl > > > /* > > > * Update lastReplayedEndRecPtr after this record has been successfully > > > * replayed. > > > */ > > > SpinLockAcquire(&XLogRecoveryCtl->info_lck); > > > XLogRecoveryCtl->lastReplayedReadRecPtr = xlogreader->ReadRecPtr; > > > XLogRecoveryCtl->lastReplayedEndRecPtr = xlogreader->EndRecPtr; > > > XLogRecoveryCtl->lastReplayedTLI = *replayTLI; > > > SpinLockRelease(&XLogRecoveryCtl->info_lck); > > > > > > + /* > > > + * Wake up processes waiting for standby replay, write, or flush LSN to > > > + * reach current replay position. Replay implies that the WAL was already > > > + * written and flushed to disk, so write and flush waiters can be woken at > > > + * the replay position too. > > > + */ > > > + WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_REPLAY, xlogreader->EndRecPtr); > > > + WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_WRITE, xlogreader->EndRecPtr); > > > + WaitLSNWakeup(WAIT_LSN_TYPE_STANDBY_FLUSH, xlogreader->EndRecPtr); > > > + > > > /* ------ > > > * Wakeup walsenders: > > > * > > > * On the standby, the WAL is flushed first (which will only wake up > > > * physical walsenders) and then applied, which will only wake up logical > > > * walsenders. > > > > It becomes clear that you don't actually need the memory barrier inside > > WaitLSNWakeup(). Not sure if they're needed for other callers, but here > > we have just released a spinlock, which acts as a memory barrier. It > > might not be worth relaxing, but it does seem a little silly. > > If we made the move here, I think the memory barrier could be relaxed > since other callers are guarded by either the spinlock or full-barrier > atomic write already. We might also want to make the contract of OK, the 'if' here is redundant... > WaitLSNWakeup() explicit: callers should not publish the LSN with an > unsynchronized plain store and then immediately probe minWaitedLSN. > Another motivation for doing this might be slightly better performance > though untested. > > > If nothing else, I'd like to move those calls into ApplyWalRecord() for > > clarity (point 3 above). What do you think? > > Personally + 1. -- Regards, Xuneng Zhou HighGo Software Co., Ltd.
В списке pgsql-hackers по дате отправления
От: Salma El-Sayed
Дата:
От: Amit Langote
Дата: