Re: pg_stat_bgwriter.buffers_backend is pretty meaningless (and more?)
Melanie Plageman <melanieplageman@gmail.com>
Attachments
- v32-0002-Aggregate-IO-operation-stats-per-BackendType.patch (text/x-patch) patch v32-0002
- v32-0001-Track-IO-operation-statistics-locally.patch (text/x-patch) patch v32-0001
- v32-0003-Add-system-view-tracking-IO-ops-per-backend-type.patch (text/x-patch) patch v32-0003
v31 failed in CI, so I've attached v32 which has a few issues fixed: - addressed some compiler warnings I hadn't noticed locally - autovac launcher and worker do indeed use bulkread strategy if they end up starting before critical indexes have loaded and end up doing a sequential scan of some catalog tables, so I have changed the restrictions on BackendTypes allowed to track IO Operations in IOCONTEXT_BULKREAD - changed the name of the column "fsynced" to "files_synced" to make it more clear what unit it is in (and that the unit differs from that of the "unit" column) In an off-list discussion with Andres, he mentioned that he thought buffers reused by a BufferAccessStrategy should be split from buffers "acquired" and that "acquired" should be renamed "clocksweeps". I have started doing this, but for BufferAccessStrategy IO there are a few choices about how we want to count the clocksweeps: Currently the following situations are counted under the following IOContexts and IOOps: IOCONTEXT_[VACUUM,BULKREAD,BULKWRITE], IOOP_ACQUIRE - reuse a buffer from the ring IOCONTEXT_SHARED, IOOP_ACQUIRE - add a buffer to the strategy ring initially - add a new shared buffer to the ring when all the existing buffers in the ring are pinned And in the new paradigm, I think these are two good options: 1) IOCONTEXT_[VACUUM,BULKREAD,BULKWRITE], IOOP_CLOCKSWEEP - add a buffer to the strategy ring initially - add a new shared buffer to the ring when all the existing buffers in the ring are pinned IOCONTEXT_[VACUUM,BULKREAD,BULKWRITE], IOOP_REUSE - reuse a buffer from the ring 2) IOCONTEXT_[VACUUM,BULKREAD,BULKWRITE], IOOP_CLOCKSWEEP - add a buffer to the strategy ring initially IOCONTEXT_[VACUUM,BULKREAD,BULKWRITE], IOOP_REUSE - reuse a buffer from the ring IOCONTEXT SHARED, IOOP_CLOCKSWEEP - add a new shared buffer to the ring when all the existing buffers in the ring are pinned However, if we want to differentiate between buffers initially added to the ring and buffers taken from shared buffers and added to the ring because all strategy ring buffers are pinned or have a usage count above one, then we would need to either do so inside of GetBufferFromRing() or propagate this distinction out somehow (easy enough if we care to do it). There are other combinations that I could come up with a justification for as well, but I wanted to know what other people thought made sense (and would make sense to users). - Melanie
Commits
-
Stabilize pg_stat_io writes test
- ef719e7b32fc 16.0 landed
-
Fix flakey pg_stat_io test
- 1be0fdb9de55 16.0 landed
-
Suppress more compiler warnings in new pgstats code.
- b1b86820d84e 16.0 landed
-
Suppress compiler warnings in new pgstats code.
- 728560db7d86 16.0 landed
-
Add tests for pg_stat_io
- 10a082bf7215 16.0 landed
-
Create regress_tblspc in test_setup
- 9c83bbcf7ef6 16.0 landed
-
Add pg_stat_io view, providing more detailed IO statistics
- a9c70b46dbe1 16.0 landed
-
pgstat: Track more detailed relation IO statistics
- f30d62c2fc60 16.0 landed
-
pgstat: Infrastructure for more detailed IO statistics
- 28e626bde00e 16.0 landed
-
doc: Fix some issues in logical replication section
- 4f74f5641d53 16.0 cited
-
Manual cleanup and pgindent of pgstat and bufmgr related code
- 250c8ee07ede 16.0 landed
-
Have the planner consider Incremental Sort for DISTINCT
- 3c6fc58209f2 16.0 cited
-
Use actual backend IDs in pg_stat_get_backend_idset() and friends.
- d7e39d72ca1c 16.0 cited
-
Remove redundant call to pgstat_report_wal()
- 1bdd54e662d5 16.0 landed
-
Add BackendType for standalone backends
- 0c679464a837 16.0 landed
-
Initialize backend status reporting during bootstrap.
- 3b34645678d1 15.0 landed