Re: per backend WAL statistics

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Andres Freund <andres@anarazel.de>
Cc: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-01-16T23:43:57Z
Lists: pgsql-hackers
On Thu, Jan 16, 2025 at 12:44:20PM -0500, Andres Freund wrote:
> On 2025-01-16 17:11:09 +0000, Bertrand Drouvot wrote:
>> So, do you think that the initial proposal that has been made here (See R1. in
>> [2]) i.e make use of a new PendingBackendWalStats variable:
> 
> Well, I think this first needs be fixed for for the IO stats change made in
> 
> Once we have a pattern to model after, we can apply the same scheme here.

Okay, thanks for the input.  I was not sure what you intended
originally with all this part of the backend code, and how much would
be acceptable.  The line is clear now.

>> 0003 does not rely on pgstat_prep_backend_pending() for its pending statistics
>> but on a new PendingBackendWalStats variable. The reason is that the pending wal
>> statistics are incremented in a critical section (see XLogWrite(), and so
>> a call to pgstat_prep_pending_entry() could trigger a failed assertion:
>> MemoryContextAllocZero()->"CritSectionCount == 0 || (context)->allowInCritSection"
>> "
>> 
>> and implemented up to v4 is a viable approach?
> 
> Yes-ish.  I think it would be better to make it slightly more general than
> that, handling this for all types of backend stats, not just for WAL.

Agreed to use the same concept for all these parts of the backend
stats kind rather than two of them.  Will send a reply on the original
backend I/O thread as well.
--
Michael

Commits

  1. Fix use-after-free in pgstat_fetch_stat_backend_by_pid()

  2. Remove initialization from PendingBackendStats

  3. Add WAL data to backend statistics

  4. Improve check for detection of pending data in backend statistics

  5. Fix some gaps in pg_stat_io with WAL receiver and WAL summarizer

  6. Handle auxiliary processes in SQL functions of backend statistics

  7. Invent pgstat_fetch_stat_backend_by_pid()

  8. Refactor code of pg_stat_get_wal() building result tuple

  9. Adding new PgStat_WalCounters structure in pgstat.h

  10. Remove pgstat_flush_wal()

  11. Refactor some code related to backend statistics

  12. Add backend-level statistics to pgstats