Re: WAL logging problem in 9.4.3?
Daniel Gustafsson <daniel@yesql.se>
> On 13 Apr 2017, at 11:42, Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > > At Thu, 13 Apr 2017 13:52:40 +0900, Michael Paquier <michael.paquier@gmail.com> wrote in <CAB7nPqTRyica1d-zU+YckveFC876=Sc847etmk7TRgAS2pA9CA@mail.gmail.com> >> On Tue, Apr 11, 2017 at 5:38 PM, Kyotaro HORIGUCHI >> <horiguchi.kyotaro@lab.ntt.co.jp> wrote: >>> Sorry, what I have just sent was broken. >> >> You can use PROVE_TESTS when running make check to select a subset of >> tests you want to run. I use that all the time when working on patches >> dedicated to certain code paths. > > Thank you for the information. Removing unwanted test scripts > from t/ directories was annoyance. This makes me happy. > >>>> - Relation has new members no_pending_sync and pending_sync that >>>> works as instant cache of an entry in pendingSync hash. >>>> - Commit-time synchronizing is restored as Michael's patch. >>>> - If relfilenode is replaced, pending_sync for the old node is >>>> removed. Anyway this is ignored on abort and meaningless on >>>> commit. >>>> - TAP test is renamed to 012 since some new files have been added. >>>> >>>> Accessing pending sync hash occurred on every calling of >>>> HeapNeedsWAL() (per insertion/update/freeze of a tuple) if any of >>>> accessing relations has pending sync. Almost of them are >>>> eliminated as the result. >> >> Did you actually test this patch? One of the logs added makes the >> tests a long time to run: > > Maybe this patch requires make clean since it extends the > structure RelationData. (Perhaps I saw the same trouble.) > >> 2017-04-13 12:11:27.065 JST [85441] t/102_vacuumdb_stages.pl >> STATEMENT: ANALYZE; >> 2017-04-13 12:12:25.766 JST [85492] LOG: BufferNeedsWAL: pendingSyncs >> = 0x0, no_pending_sync = 0 >> >> - lsn = XLogInsert(RM_SMGR_ID, >> - XLOG_SMGR_TRUNCATE | XLR_SPECIAL_REL_UPDATE); >> + rel->no_pending_sync= false; >> + rel->pending_sync = pending; >> + } >> >> It seems to me that those flags and the pending_sync data should be >> kept in the context of backend process and not be part of the Relation >> data... > > I understand that the context of "backend process" means > storage.c local. I don't mind the context on which the data is, > but I found only there that can get rid of frequent hash > searching. For pending deletions, just appending to a list is > enough and costs almost nothing, on the other hand pendig syncs > are required to be referenced, sometimes very frequently. > >> +void >> +RecordPendingSync(Relation rel) >> I don't think that I agree that this should be part of relcache.c. The >> syncs are tracked should be tracked out of the relation context. > > Yeah.. It's in storage.c in the latest patch. (Sorry for the > duplicate name). I think it is a kind of bond between smgr and > relation. > >> Seeing how invasive this change is, I would also advocate for this >> patch as only being a HEAD-only change, not many people are >> complaining about this optimization of TRUNCATE missing when wal_level >> = minimal, and this needs a very careful review. > > Agreed. > >> Should I code something? Or Horiguchi-san, would you take care of it? >> The previous crash I saw has been taken care of, but it's been really >> some time since I looked at this patch... > > My point is hash-search on every tuple insertion should be evaded > even if it happens rearely. Once it was a bit apart from your > original patch, but in the latest patch the significant part > (pending-sync hash) is revived from the original one. This patch has followed along since CF 2016-03, do we think we can reach a conclusion in this CF? It was marked as "Waiting on Author”, based on developments since in this thread, I’ve changed it back to “Needs Review” again. cheers ./daniel
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