Re: Excessive PostmasterIsAlive calls slow down WAL redo
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Andres Freund <andres@anarazel.de>, Stephen Frost <sfrost@snowman.net>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-04-06T17:09:30Z
Lists: pgsql-hackers
On 06/04/18 19:39, Andres Freund wrote: > On 2018-04-06 07:39:28 -0400, Stephen Frost wrote: >> While I tend to agree that it'd be nice to just make it cheaper, that >> doesn't seem like something that we'd be likely to back-patch and I tend >> to share Heikki's feelings that this is a performance regression we >> should be considering fixing in released versions. To be clear, this isn't a performance *regression*. It's always been bad. I'm not sure if I'd backpatch this. Maybe after it's been in 'master' for a while and we've gotten some field testing of it. > I'm doubtful about fairly characterizing this as a performance bug. It's > not like we've O(n^2) behaviour on our hand, and if your replay isn't of > a toy workload normally that one syscall isn't going to make a huge > difference because you've actual IO and such going on. If all the data fits in the buffer cache, then there would be no I/O. Think of a smallish database that's heavily updated. There are a lot of real applications like that. > I'm also doubtful that it's sane to just check every 32 records. There's > records that can take a good chunk of time, and just continuing for > another 31 records seems like a bad idea. It's pretty arbitrary, I admit. It's the best I could come with, though. If we could get a signal on postmaster death, that'd be best, but that's a much bigger patch, and I'm worried that it would bring new portability and reliability issues. I'm not too worried about 32 records being too long an interval. True, replaying 32 CREATE DATABASE records would take a long time. But pretty much all other WAL records are fast enough to apply. We could make it every 8 records rather than 32, if that makes you feel better. Or add some extra conditions, like always check it when stepping to a new WAL segment. In any case, the fundamental difference would be though to not check it between every record. - Heikki
Commits
-
Poll postmaster less frequently in recovery.
- 57dcc2ef3320 14.0 landed
-
Use signals for postmaster death on FreeBSD.
- f98b8476cd4a 12.0 landed
-
Use signals for postmaster death on Linux.
- 9f09529952ac 12.0 landed
-
Introduce a pipe between postmaster and each backend, which can be used to
- 89fd72cbf26f 9.2.0 cited