Re: WIP: WAL prefetch (another approach)
Thomas Munro <thomas.munro@gmail.com>
Attachments
- 0001-Allow-PrefetchBuffer-to-be-called-with-a-SMgrRela-v2.patch (application/octet-stream) patch v2-0001
- 0002-Rename-GetWalRcvWriteRecPtr-to-GetWalRcvFlushRecP-v2.patch (application/octet-stream) patch v2-0002
- 0003-Add-WalRcvGetWriteRecPtr-new-definition-v2.patch (application/octet-stream) patch v2-0003
- 0004-Allow-PrefetchBuffer-to-report-missing-file-in-re-v2.patch (application/octet-stream) patch v2-0004
- 0005-Prefetch-referenced-blocks-during-recovery-v2.patch (application/octet-stream) patch v2-0005
On Fri, Jan 3, 2020 at 5:57 PM Thomas Munro <thomas.munro@gmail.com> wrote: > On Fri, Jan 3, 2020 at 7:10 AM Tomas Vondra > <tomas.vondra@2ndquadrant.com> wrote: > > Could we instead specify the number of blocks to prefetch? We'd probably > > need to track additional details needed to determine number of blocks to > > prefetch (essentially LSN for all prefetch requests). Here is a new WIP version of the patch set that does that. Changes: 1. It now uses effective_io_concurrency to control how many concurrent prefetches to allow. It's possible that we should have a different GUC to control "maintenance" users of concurrency I/O as discussed elsewhere[1], but I'm staying out of that for now; if we agree to do that for VACUUM etc, we can change it easily here. Note that the value is percolated through the ComputeIoConcurrency() function which I think we should discuss, but again that's off topic, I just want to use the standard infrastructure here. 2. You can now change the relevant GUCs (wal_prefetch_distance, wal_prefetch_fpw, effective_io_concurrency) at runtime and reload for them to take immediate effect. For example, you can enable the feature on a running replica by setting wal_prefetch_distance=8kB (from the default of -1, which means off), and something like effective_io_concurrency=10, and telling the postmaster to reload. 3. The new code is moved out to a new file src/backend/access/transam/xlogprefetcher.c, to minimise new bloat in the mighty xlog.c file. Functions were renamed to make their purpose clearer, and a lot of comments were added. 4. The WAL receiver now exposes the current 'write' position via an atomic value in shared memory, so we don't need to hammer the WAL receiver's spinlock. 5. There is some rudimentary user documentation of the GUCs. [1] https://www.postgresql.org/message-id/13619.1557935593%40sss.pgh.pa.us
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