Re: per backend WAL statistics
Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Attachments
Hi, On Wed, Mar 05, 2025 at 05:26:40PM +0000, Bertrand Drouvot wrote: > So yeah, back to the issue, we have to pay more attention for the WAL stats > because pgWalUsage is "incremented" without any check with pgstat_tracks_backend_bktype() > (that's not the case for the IO stats where the counters are incremented taking > into account pgstat_tracks_backend_bktype()). > > So for the moment, in the attached I "just" add a pgstat_tracks_backend_bktype() > check in pgstat_backend_have_pending_cb() but I'm not sure I like it that much... > > Will think more about it... After giving more thoughts, I think that the way it's currently done makes sense. There is no need to check pgstat_tracks_backend_bktype() while incrementing pgWalUsage or to create a "BackendpgWalUsage" (that would be incremented based on the pgstat_tracks_backend_bktype()). In pgstat_create_backend() (called based on pgstat_tracks_backend_bktype()): - PendingBackendStats is initialized to zero - prevBackendWalUsage is initialized to pgWalUsage But: 1. PendingBackendStats is "incremented" during IO operations, so that it makes sense to ensure that pgstat_tracks_backend_bktype() returns true in those functions (i.e pgstat_count_backend_io_op_time() and pgstat_count_backend_io_op()). 2. prevBackendWalUsage is not incremented, it's just there to compute the delta with pgWalUsage in pgstat_flush_backend_entry_wal(). pgstat_flush_backend_entry_wal() is only called from pgstat_flush_backend() that does the pgstat_tracks_backend_bktype() before. And so is pgstat_flush_backend_entry_io(). So, I think it's fine the way it's done here. The missing part was in pgstat_backend_have_pending_cb() which has been fixed. But this missing part was already there for the IO stats. It just not manifested yet maybe because PendingBackendStats was full of zeroes by "luck". Indeed, there is no reason for pgstat_backend_have_pending_cb() to return true if pgstat_tracks_backend_bktype() is not satisfied. So it deserves a dedicated patch to fix this already existing issue: 0001 attached. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
Commits
-
Fix use-after-free in pgstat_fetch_stat_backend_by_pid()
- 3191a593d6de 18.0 landed
-
Remove initialization from PendingBackendStats
- f554a95379a9 18.0 landed
-
Add WAL data to backend statistics
- 76def4cdd7c2 18.0 landed
-
Improve check for detection of pending data in backend statistics
- 9a8dd2c5a6d9 18.0 landed
-
Fix some gaps in pg_stat_io with WAL receiver and WAL summarizer
- f4694e0f35b2 18.0 landed
-
Handle auxiliary processes in SQL functions of backend statistics
- 3f1db99bfabb 18.0 landed
-
Invent pgstat_fetch_stat_backend_by_pid()
- c2a50ac678eb 18.0 landed
-
Refactor code of pg_stat_get_wal() building result tuple
- 495864a4cf16 18.0 landed
-
Adding new PgStat_WalCounters structure in pgstat.h
- 0e42d31b0b22 18.0 landed
-
Remove pgstat_flush_wal()
- d7cbeaf261da 18.0 landed
-
Refactor some code related to backend statistics
- 2c14037bb57c 18.0 landed
-
Add backend-level statistics to pgstats
- 9aea73fc61d4 18.0 cited