Re: [HACKERS] WAL logging problem in 9.4.3?
Noah Misch <noah@leadboat.com>
Attachments
- skip-wal-v41nm.tar.gz (application/x-tar-gz)
I think attached v41nm is ready for commit. Would anyone like to vote against back-patching this? It's hard to justify lack of back-patch for a data-loss bug, but this is atypically invasive. (I'm repeating the question, since some folks missed my 2020-02-18 question.) Otherwise, I'll push this on Saturday. On Mon, Mar 23, 2020 at 05:20:27PM +0900, Kyotaro Horiguchi wrote: > At Sat, 21 Mar 2020 15:49:20 -0700, Noah Misch <noah@leadboat.com> wrote in > > The proximate cause is the RelFileNodeSkippingWAL() call that we added to > > MarkBufferDirtyHint(). MarkBufferDirtyHint() runs in parallel workers, but > > parallel workers have zeroes for pendingSyncHash and rd_*Subid. > > Kyotaro, can you look through the affected code and propose a strategy for > > good coexistence of parallel query with the WAL skipping mechanism? > > Bi-directional communication between leader and workers is too-much. > It wouldn't be acceptable to inhibit the problematic operations on > workers such like heap-prune or btree pin removal. If we do pending > syncs just before worker start, it won't fix the issue. > > The attached patch passes a list of pending-sync relfilenodes at > worker start. If you were to issue pending syncs and also cease skipping WAL for affected relations, that would fix the issue. Your design is better, though. I made two notable changes: - The patch was issuing syncs or FPIs every time a parallel worker exited. I changed it to skip most of smgrDoPendingSyncs() in parallel workers, like AtEOXact_RelationMap() does. - PARALLEL_KEY_PENDING_SYNCS is most similar to PARALLEL_KEY_REINDEX_STATE and PARALLEL_KEY_COMBO_CID. parallel.c, not execParallel.c, owns those. I moved PARALLEL_KEY_PENDING_SYNCS to parallel.c, which also called for style changes in the associated storage.c functions. Since pendingSyncHash is always NULL under XLogIsNeeded(), I also removed some XLogIsNeeded() tests that immediately preceded !pendingSyncHash tests.
Commits
-
Add perl2host call missing from a new test file.
- 70de4e950c3b 13.0 landed
-
Skip WAL for new relfilenodes, under wal_level=minimal.
- c6b92041d385 13.0 landed
- 9db4b9da2801 9.5.22 landed
- a653bd8aa76e 9.6.18 landed
- 9d6215205e5a 10.13 landed
- 03b89f1949a9 11.8 landed
- e4b0a02ef8c8 12.3 landed
- cb2fd7eac285 13.0 landed
-
Revert "Skip WAL for new relfilenodes, under wal_level=minimal."
- b31e96ba420f 9.5.22 landed
- 348f15e22e94 9.6.18 landed
- 0a6c9c66da26 10.13 landed
- 63631ee64f84 12.3 landed
- 2fbdebc248ec 11.8 landed
- de9396326edc 13.0 landed
-
Back-patch log_newpage_range().
- e0dd086414f7 9.5.22 landed
- 14d2bb4941e6 9.6.18 landed
- 43434ed94d80 10.13 landed
- ae86e46c3b7b 11.8 landed
-
During heap rebuild, lock any TOAST index until end of transaction.
- a8f754aea014 9.6.18 landed
- 978da2a95597 9.5.22 landed
- 78a34c68920a 10.13 landed
- 88b3a6cd2623 12.3 landed
- 4433c6e8c0a5 11.8 landed
- e629a01f6973 13.0 landed
-
In log_newpage_range(), heed forkNum and page_std arguments.
- a5abec521c5d 12.3 landed
- d3e572855be1 13.0 landed
-
Back-patch src/test/recovery and PostgresNode from 9.6 to 9.5.
- 12034da6cc39 9.5.22 landed
-
Reduce pg_ctl's reaction time when waiting for postmaster start/stop.
- c61559ec3a41 10.0 cited
-
Accelerate end-of-transaction dropping of relations
- 279628a0a7cf 9.3.0 cited
-
Redesign the planner's handling of index-descent cost estimation.
- 31f38f28b00c 9.3.0 cited
-
Make TRUNCATE do truncate-in-place when processing a relation that was created
- cab9a0656c36 9.0.0 cited