Re: walsender performance regression due to logical decoding on standby changes
От | Bharath Rupireddy |
---|---|
Тема | Re: walsender performance regression due to logical decoding on standby changes |
Дата | |
Msg-id | CALj2ACVDj+D-nPkzu0f06fMwigBJHwx03FEpfsz427G6AasKWA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: walsender performance regression due to logical decoding on standby changes ("Drouvot, Bertrand" <bertranddrouvot.pg@gmail.com>) |
Ответы |
RE: walsender performance regression due to logical decoding on standby changes
Re: walsender performance regression due to logical decoding on standby changes |
Список | pgsql-hackers |
On Wed, May 10, 2023 at 3:23 PM Drouvot, Bertrand <bertranddrouvot.pg@gmail.com> wrote: > > >> My current guess is that mis-using a condition variable is the best bet. I > >> think it should work to use ConditionVariablePrepareToSleep() before a > >> WalSndWait(), and then ConditionVariableCancelSleep(). I.e. to never use > >> ConditionVariableSleep(). The latch set from ConditionVariableBroadcast() > >> would still cause the necessary wakeup. > > > > How about something like the attached? Recovery and subscription tests > > don't complain with the patch. > > I launched a full Cirrus CI test with it but it failed on one environment (did not look in details, > just sharing this here): https://cirrus-ci.com/task/6570140767092736 Yeah, v1 had ConditionVariableInit() such that the CV was getting initialized for every backend as opposed to just once after the WAL sender shmem was created. > Also I have a few comments: Indeed, v1 was a WIP patch. Please have a look at the attached v2 patch, which has comments and passing CI runs on all platforms - https://github.com/BRupireddy/postgres/tree/optimize_walsender_wakeup_logic_v2. On Wed, May 10, 2023 at 3:41 PM Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com> wrote: > > if (AllowCascadeReplication()) > - WalSndWakeup(switchedTLI, true); > + ConditionVariableBroadcast(&WalSndCtl->cv); > > After the change, we wakeup physical walsender regardless of switchedTLI flag. > Is this intentional ? if so, I think It would be better to update the comments above this. That's not the case with the attached v2 patch. Please have a look. On Thu, May 11, 2023 at 10:27 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > We can have two condition variables for > logical and physical walsenders, and selectively wake up walsenders > sleeping on the condition variables. It should work, it seems like > much of a hack, though. Andres, rightly put it - 'mis-using' CV infrastructure. It is simple, works, and makes the WalSndWakeup() easy solving the performance regression. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
Вложения
В списке pgsql-hackers по дате отправления: