Re: shared-memory based stats collector - v67
Andres Freund <andres@anarazel.de>
Attachments
- v67-0001-pgstat-reorder-pgstat.-ch-contents.patch.gz (application/x-patch-gzip) patch v67-0001
- v67-0002-pgstat-add-pgstat_copy_relation_stats.patch.gz (application/x-patch-gzip) patch v67-0002
- v67-0003-pgstat-fix-function-name-in-comment.patch.gz (application/x-patch-gzip) patch v67-0003
- v67-0004-pgstat-remove-some-superflous-comments-from-pgst.patch.gz (application/x-patch-gzip) patch v67-0004
- v67-0005-pgstat-stats-collector-references-in-comments.patch.gz (application/x-patch-gzip) patch v67-0005
- v67-0006-pgstat-scaffolding-for-transactional-stats-creat.patch.gz (application/x-patch-gzip) patch v67-0006
- v67-0007-pgstat-store-statistics-in-shared-memory.patch.gz (application/x-patch-gzip) patch v67-0007
- v67-0008-pgstat-add-pg_stat_force_next_flush.patch.gz (application/x-patch-gzip) patch v67-0008
- v67-0009-pgstat-utilize-pg_stat_force_next_flush-to-simpl.patch.gz (application/x-patch-gzip) patch v67-0009
- v67-0010-pgstat-test-transaction-behaviour-2PC-function-s.patch.gz (application/x-patch-gzip) patch v67-0010
- v67-0011-pgstat-wip-only-reset-pgstat-data-after-crash-re.patch.gz (application/x-patch-gzip) patch v67-0011
- v67-0012-pgstat-test-test-stats-interactions-with-streami.patch.gz (application/x-patch-gzip) patch v67-0012
- v67-0013-pgstat-test-discarding-stats-after-crash.patch.gz (application/x-patch-gzip) patch v67-0013
- v67-0014-pgstat-test-subscriber-stats-reset-and-drop.patch.gz (application/x-patch-gzip) patch v67-0014
- v67-0015-pgstat-wip-remove-stats_temp_directory.patch.gz (application/x-patch-gzip) patch v67-0015
- v67-0016-pgstat-rename-STATS_COLLECTOR-GUC-group-to-STATS.patch.gz (application/x-patch-gzip) patch v67-0016
- v67-0017-pgstat-move-pgstat.c-to-utils-activity.patch.gz (application/x-patch-gzip) patch v67-0017
Hi, Attached is v67 of the patch. Changes: - I've committed a number of the earlier patches after polishing them some more - lots of small cleanups, particularly around reducing unnecessary diff noise - included Melanie's tests On 2022-03-17 00:36:52 -0700, Andres Freund wrote: > I think the first few patches are basically ready to be applied and are > independently worthwhile: > - 0001-pgstat-run-pgindent-on-pgstat.c-h.patch > - 0002-pgstat-split-relation-database-stats-handling-ou.patch > - 0003-pgstat-split-out-WAL-handling-from-pgstat_-initi.patch > - 0004-pgstat-introduce-pgstat_relation_should_count.patch > - 0005-pgstat-xact-level-cleanups-consolidation.patch Committed. > Might not be worth having separately, should probably just be part of > 0014: > - 0006-pgstat-wip-pgstat-relation-init-assoc.patch Committed parts, the "assoc" stuff was moved into the main shared memory stats patch. > A pain to maintain, needs mostly a bit of polishing of file headers. Perhaps I > should rename pgstat_checkpoint.c to pgstat_checkpointer.c, fits better with > function names: > - 0007-pgstat-split-different-types-of-stats-into-separ.patch Committed. > This is also painful to maintain. Mostly kept separate from 0007 for easier > reviewing: > - 0009-pgstat-reorder-file-pgstat.c-pgstat.h-contents.patch Planning to commit this soon (it's now 0001). Doing a last few passes of readthrough / polishing. > I don't yet know what we should do with other users of > PG_STAT_TMP_DIR. There's no need for it for pgstat.c et al anymore. Not sure > that pg_stat_statement is enough of a reason to keep the stats_temp_directory > GUC around? > - 0019-pgstat-wip-remove-stats_temp_directory.patch Still unclear. Might raise this separately for higher visibility. > Right now we reset stats for replicas, even if we start from a shutdown > checkpoint. That seems pretty unnecessary with this patch: > - 0021-pgstat-wip-only-reset-pgstat-data-after-crash-re.patch Might raise this in another thread for higher visibility. > The biggest todos are: > - Address all the remaining AFIXMEs and XXXs > - add longer explanation of architecture to pgstat.c (or a README) > - make naming not "a pain in the neck": [1] > - lots of polishing > - run benchmarks - I've done so in the past, but not recently Still TBD > - revise docs Kyotaro-san, maybe you could do a first pass? > - Further improve our stats test coverage - there's a crapton not covered, > despite 0017: > - test WAL replay with stats (stats for dropped tables are removed etc) > - test crash recovery and "invalid stats file" paths > - lot of the pg_stat_ views like bgwriter, pg_stat_database have zero coverage today That's gotten a lot better with Melanie's tests, still a bit further to go. I think she's found at least one more small bug that's not yet fixed here. > - perhaps 0014 can be further broken down - it's still uncomfortably large Things that I think can be split out: - Encapsulate "if (pgStatSock == PGINVALID_SOCKET || !pgstat_track_counts)" style tests in a helper function. Then just the body needs to be changed, rather than a lot of places needing such checks. Yep, that's it. I don't really see anything else that wouldn't be too awkward. Would welcome suggestions!. Greetings, Andres Freund
Commits
-
Improve comment about dropped entries in pgstat.c
- a0ab20f16541 15.11 landed
- ec194b448cbc 16.7 landed
- bb93b33d7e39 17.3 landed
- 001a537b83ec 18.0 landed
-
Fix temporary memory leak in system table index scans
- 1acf10549e64 18.0 cited
-
pgstat: set timestamps of fixed-numbered stats after a crash.
- 5cd1c40b3ce9 15.0 landed
-
pgstat: Update docs to match the shared memory stats reality.
- b3abca68106d 15.0 landed
-
pgstat: Hide instability in stats.spec with -DCATCACHE_FORCE_RELEASE.
- d6c0db14836c 15.0 cited
-
pgstat: add/extend tests for resetting various kinds of stats.
- 5264add78478 15.0 landed
-
Add minimal tests for recovery conflict handling.
- 9f8a050f68dc 15.0 landed
-
pgstat: test stats interactions with physical replication.
- 53b9cd20d414 15.0 landed
-
pgstat: add tests for handling of restarts, including crashes.
- 16acf7f1aaea 15.0 landed
-
pgstat: add tests for transaction behaviour, 2PC, function stats.
- e349c95d3e91 15.0 landed
-
pgstat: add pg_stat_have_stats() test helper.
- ad401664b801 15.0 landed
-
pgstat: add pg_stat_force_next_flush(), use it to simplify tests.
- 0f96965c6581 15.0 landed
-
pgstat: move pgstat.c to utils/activity.
- fbfe6910eca0 15.0 landed
-
pgstat: store statistics in shared memory.
- 5891c7a8ed8f 15.0 landed
-
pgstat: remove stats_temp_directory.
- 6f0cf87872ab 15.0 landed
-
pgstat: rename STATS_COLLECTOR GUC group to STATS_CUMULATIVE.
- 1db4e5a4eeec 15.0 landed
-
pgstat: revise replication slot API in preparation for shared memory stats.
- e41aed674f35 15.0 landed
-
pgstat: scaffolding for transactional stats creation / drop.
- 8b1dccd37c71 15.0 landed
-
pgstat: introduce PgStat_Kind enum.
- 997afad89d12 15.0 landed
-
pgstat: prepare APIs used by pgstatfuncs for shared memory stats.
- 8fb580a35ce3 15.0 landed
-
pgstat: add pgstat_copy_relation_stats().
- 8ea7963fc741 15.0 landed
-
pgstat: rename some pgstat_send_* functions to pgstat_report_*.
- cc96373cf39b 15.0 landed
-
pgstat: stats collector references in comments.
- bdbd3d9064f9 15.0 landed
-
pgstat: move transactional code into pgstat_xact.c.
- ab62a642d52c 15.0 landed
-
dsm: allow use in single user mode.
- 46a2d2499a64 15.0 landed
-
dshash: revise sequential scan support.
- 909eebf27b9e 15.0 landed
-
pgstat: remove some superflous comments from pgstat.h.
- 55e566fc4bc8 15.0 landed
-
pgstat: reorder pgstat.[ch] contents.
- 315ae75e9b6d 15.0 landed
-
pgstat: split different types of stats into separate files.
- 13619598f108 15.0 landed
-
pgstat: introduce pgstat_relation_should_count().
- 8363102009d8 15.0 landed
-
pgstat: separate "xact level" handling out of relation specific functions.
- d4ba8b51c763 15.0 landed
-
pgstat: rename pgstat_initstats() to pgstat_relation_init().
- bff258a2732e 15.0 landed
-
pgstat: split out WAL handling from pgstat_{initialize,report_stat}.
- 78f9506b380f 15.0 landed
-
pgstat: run pgindent on pgstat.c/h.
- a3a75b982b5b 15.0 landed
-
pgstat: split relation, database handling out of pgstat_report_stat().
- 89c546c29489 15.0 landed
-
Move code around in StartupXLOG().
- be1c00ab13a7 15.0 cited
-
pgstat: Prepare to use mechanism for truncated rels also for droppped rels.
- 6b9501660c93 15.0 landed
-
pgstat: Split out relation stats handling from AtEO[Sub]Xact_PgStat() etc.
- e1f958d759ff 15.0 landed
-
pgstat: Schedule per-backend pgstat shutdown via before_shmem_exit().
- fb2c5028e635 15.0 landed
-
Schedule ShutdownXLOG() in single user mode using before_shmem_exit().
- a1bb3d5dbe6a 15.0 landed
-
Make parallel worker shutdown complete entirely via before_shmem_exit().
- fa91d4c91f28 15.0 landed
-
pgstat: Bring up pgstat in BaseInit() to fix uninitialized use of pgstat by AV.
- ee3f8d3d3aec 15.0 landed
-
pgstat: split reporting/fetching of bgwriter and checkpointer stats.
- 1bc8e7b0991c 15.0 landed
-
Split backend status and progress related functionality out of pgstat.c.
- e1025044cd4e 14.0 landed
-
Split wait event related code from pgstat.[ch] into wait_event.[ch].
- a333476b9251 14.0 landed
-
Make archiver process an auxiliary process.
- d75288fb27b8 14.0 landed
-
Force to send remaining WAL stats to the stats collector at walwriter exit.
- 33394ee6f243 14.0 cited
-
Add pg_stat_database counters for sessions and session time
- 960869da0803 14.0 cited
-
Collect statistics about SLRU caches
- 28cac71bd368 13.0 cited
-
Don't run atexit callbacks in quickdie signal handlers.
- 8e19a82640d3 12.0 cited
-
Create a "fast path" for acquiring weak relation locks.
- 3cba8999b343 9.2.0 cited