Re: pg_stat_bgwriter.buffers_backend is pretty meaningless (and more?)
Melanie Plageman <melanieplageman@gmail.com>
Attachments
- v35-0001-Remove-BufferAccessStrategyData-current_was_in_r.patch (text/x-patch) patch v35-0001
- v35-0002-Track-IO-operation-statistics-locally.patch (text/x-patch) patch v35-0002
- v35-0004-Add-system-view-tracking-IO-ops-per-backend-type.patch (text/x-patch) patch v35-0004
- v35-0003-Aggregate-IO-operation-stats-per-BackendType.patch (text/x-patch) patch v35-0003
v35 is attached On Mon, Oct 24, 2022 at 2:38 PM Melanie Plageman <melanieplageman@gmail.com> wrote: > > On Thu, Oct 20, 2022 at 1:31 PM Andres Freund <andres@anarazel.de> wrote: > > I wonder if we should add a "source" output argument to > > StrategyGetBuffer(). Then nearly all the counting can happen in > > BufferAlloc(). > > I think we can just check for BM_VALID being set before invalidating it > in order to claim the buffer at the end of BufferAlloc(). Then we can > count it as an eviction or reuse. Done this in attached version > > > On 2022-10-19 15:26:51 -0400, Melanie Plageman wrote: > > > I have made some major changes in this area to make the columns more > > > useful. I have renamed and split "clocksweeps". It is now "evicted" and > > > "freelist acquired". This makes it clear when a block must be evicted > > > from a shared buffer must be and may help to identify misconfiguration > > > of shared buffers. > > > > I'm not sure freelist acquired is really that useful? If we don't add it, we > > should however definitely not count buffers from the freelist as evictions. > > > > > > > There is some nuance here that I tried to make clear in the docs. > > > "freelist acquired" in a shared context is straightforward. > > > "freelist acquired" in a strategy context is counted when a shared > > > buffer is added to the strategy ring (not when it is reused). > > > > Not sure what the second half here means - why would a buffer that's not from > > the freelist ever be counted as being from the freelist? > > > > > > > "freelist_acquired" is confusing for local buffers but I wanted to > > > distinguish between reuse/eviction of local buffers and initial > > > allocation. "freelist_acquired" seemed more fitting because there is a > > > clocksweep to find a local buffer and if it hasn't been allocated yet it > > > is allocated in a place similar to where shared buffers acquire a buffer > > > from the freelist. If I didn't count it here, I would need to make a new > > > column only for local buffers called "allocated" or something like that. > > > > I think you're making this too granular. We need to have more detail than > > today. But we don't necessarily need to catch every nuance. I cut freelist_acquired in attached version. > I am fine with cutting freelist_acquired. The same actionable > information that it could provide could be provided by "read", right? > Also, removing it means I can remove the complicated explanation of how > freelist_acquired should be interpreted in IOCONTEXT_LOCAL. > > Speaking of IOCONTEXT_LOCAL, I was wondering if it is confusing to call > it IOCONTEXT_LOCAL since it refers to IO done for temporary tables. What > if, in the future, we want to track other IO done using data in local > memory? Also, what if we want to track other IO done using data from > shared memory that is not in shared buffers? Would IOCONTEXT_SB and > IOCONTEXT_TEMP be better? Should IOContext literally describe the > context of the IO being done and there be a separate column which > indicates the source of the data for the IO? > Like wal_buffer, local_buffer, shared_buffer? Then if it is not > block-oriented, it could be shared_mem, local_mem, or bypass? pg_stat_statements uses local_blks_read and temp_blks_read for local buffers for temp tables and temp file IO respectively -- so perhaps we should stick to that Other updates in this version: I've also updated the unit column to bytes_conversion. I've made quite a few updates to the docs including more information on overlaps between pg_stat_database, pg_statio_*, and pg_stat_statements. Let me know if there are other configuration tip resources from the existing docs that I could link in the column "files_synced". I still need to look at the docs with fresh eyes and do another round of cleanup (probably). - 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