Re: Excessive PostmasterIsAlive calls slow down WAL redo
От | Thomas Munro |
---|---|
Тема | Re: Excessive PostmasterIsAlive calls slow down WAL redo |
Дата | |
Msg-id | CAEepm=2r5p+r6rG_pA-tOLP3Pz3=iC3aiwQEvq2sdZ+JF953EQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Excessive PostmasterIsAlive calls slow down WAL redo (Heikki Linnakangas <hlinnaka@iki.fi>) |
Список | pgsql-hackers |
On Wed, Apr 11, 2018 at 10:22 PM, Heikki Linnakangas <hlinnaka@iki.fi> wrote: > On 10/04/18 04:36, Thomas Munro wrote: >> Just an idea, not tested: what about a reusable WaitEventSet with zero >> timeout? Using the kqueue patch, that'd call kevent() which'd return >> immediately and tell you if any postmaster death notifications had >> arrive on your queue since last time you asked. It doesn't even touch >> the pipe, or any other kernel objects apart from your own queue IIUC. > > Hmm. In PostmasterIsAlive(), you'd still need to call kevent() to check if > postmaster has died. It would just replace the current read() syscall on the > pipe with the kevent() syscall. Is it faster? It should be (based on the report of read() being slow here because of contention on the pipe itself, I guess because of frequent poll() in WaitLatch() elsewhere?). But as I said over on another thread[1] (sorry, it got tangled up with that other conversation about a related topic), maybe testing getppid() would be simpler and about as fast as possible given you have to make a syscall (all processes should normally be children of postmaster, right?). And only check every nth time through the loop, as you said, to avoid high frequency syscalls. I think I might have been guilty of having a solution looking for a problem, there ;-) [1] https://www.postgresql.org/message-id/CAEepm%3D298omvRS2C8WO%3DCxp%2BWcM-Vn8V3x4_QhxURhKTRCSfYg%40mail.gmail.com -- Thomas Munro http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: