Re: WIP: WAL prefetch (another approach)
Tomas Vondra <tomas.vondra@2ndquadrant.com>
On Sat, Sep 05, 2020 at 12:05:52PM +1200, Thomas Munro wrote: >On Wed, Sep 2, 2020 at 2:18 AM Tomas Vondra ><tomas.vondra@2ndquadrant.com> wrote: >> On Wed, Sep 02, 2020 at 02:05:10AM +1200, Thomas Munro wrote: >> >On Wed, Sep 2, 2020 at 1:14 AM Tomas Vondra >> ><tomas.vondra@2ndquadrant.com> wrote: >> >> from the archive >> > >> >Ahh, so perhaps that's the key. >> >> Maybe. For the record, the commands look like this: >> >> archive_command = 'gzip -1 -c %p > /mnt/raid/wal-archive/%f.gz' >> >> restore_command = 'gunzip -c /mnt/raid/wal-archive/%f.gz > %p.tmp && mv %p.tmp %p' > >Yeah, sorry, I goofed here by not considering archive recovery >properly. I have special handling for crash recovery from files in >pg_wal (XLRO_END, means read until you run out of files) and streaming >replication (XLRO_WALRCV_WRITTEN, means read only as far as the wal >receiver has advertised as written in shared memory), as a way to >control the ultimate limit on how far ahead to read when >maintenance_io_concurrency and max_recovery_prefetch_distance don't >limit you first. But if you recover from a base backup with a WAL >archive, it uses the XLRO_END policy which can run out of files just >because a new file hasn't been restored yet, so it gives up >prefetching too soon, as you're seeing. That doesn't cause any >damage, but it stops doing anything useful because the prefetcher >thinks its job is finished. > >It'd be possible to fix this somehow in the two-XLogReader design, but >since I'm testing a new version that has a unified >XLogReader-with-read-ahead I'm not going to try to do that. I've >added a basebackup-with-archive recovery to my arsenal of test >workloads to make sure I don't forget about archive recovery mode >again, but I think it's actually harder to get this wrong in the new >design. In the meantime, if you are still interested in studying the >potential speed-up from WAL prefetching using the most recently shared >two-XLogReader patch, you'll need to unpack all your archived WAL >files into pg_wal manually beforehand. OK, thanks for looking into this. I guess I'll wait for an updated patch before testing this further. The storage has limited capacity so I'd have to either reduce the amount of data/WAL or juggle with the WAL segments somehow. Doesn't seem worth it. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix recovery_prefetch docs.
- dafae9707ab7 15.0 landed
-
Prefetch data referenced by the WAL, take II.
- 5dc0418fab28 15.0 landed
-
Add circular WAL decoding buffer, take II.
- 3f1ce973467a 15.0 landed
-
Fix generation of ./INSTALL for the distribution tarball
- 45aa88fe1d40 14.0 cited
-
Revert recovery prefetching feature.
- c2dc19342e05 14.0 landed
-
Sync guc.c and postgresql.conf.sample with the SGML docs.
- a55a98477b69 14.0 cited
-
Add information of total data processed to replication slot stats.
- f5fc2f5b23d1 14.0 cited
-
Doc: Review for "Optionally prefetch referenced data in recovery."
- dc88460c24ed 14.0 landed
-
Add circular WAL decoding buffer.
- f003d9f8721b 14.0 landed
-
Optionally prefetch referenced data in recovery.
- 1d257577e08d 14.0 landed
-
Remove read_page callback from XLogReader.
- 323cbe7c7ddc 14.0 cited
-
Provide ReadRecentBuffer() to re-pin buffers by ID.
- 2f27f8c51149 14.0 landed
-
Provide recovery_init_sync_method=syncfs.
- 61752afb2640 14.0 cited
-
Mark factorial operator, and postfix operators in general, as deprecated.
- 6ca547cf75ef 14.0 cited
-
Rationalize GetWalRcv{Write,Flush}RecPtr().
- d140f2f3e225 13.0 landed
-
Support PrefetchBuffer() in recovery.
- 3985b600f57d 13.0 landed
-
Prevent hard failures of standbys caused by recycled WAL segments
- 70b4f82a4b5c 11.0 cited