On Mon, Jul 2, 2012 at 1:53 PM, Andres Freund <andres@2ndquadrant.com> wrote:
>> This commit makes the synchronous replication slow down very much
>> when wal_sync_method is set to open_sync or open_datasync. I think
>> the attached patch needs to be applied.
> Hm. Yes, definitely. No idea why I placed the call there, sorry.
Committed.
>> +#define WalSndWakeupProcessRequests() \
>> + do \
>> + { \
>> + if (wake_wal_senders) \
>> + { \
>> + wake_wal_senders = false; \
>> + if (max_wal_senders > 0) \
>> + WalSndWakeup(); \
>> + } \
>> + } while (0)
>>
>> I'm not sure it's really worth doing, but isn't it good idea to test
>> max_wal_sender > 0 first to eliminate any CPU cycle in non replication
>> case?
> I think the difference is ignorable. wake_wal_senders probably has better
> cache locality but is set to true more often, but not that often...
I was wondering if we shouldn't do this as:
if (max_wal_senders > 0 && wake_wal_senders) WalSndWakeup();
....and then put wake_wal_senders = false into WalSndWakeup().
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company