Re: per backend WAL statistics

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Cc: Andres Freund <andres@anarazel.de>, Xuneng Zhou <xunengzhou@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-03-11T00:06:27Z
Lists: pgsql-hackers
On Mon, Mar 10, 2025 at 11:52:26AM +0000, Bertrand Drouvot wrote:
> Hi,
> 
> On Mon, Mar 10, 2025 at 04:46:53PM +0900, Michael Paquier wrote:
> > On Sat, Mar 08, 2025 at 07:53:04AM +0000, Bertrand Drouvot wrote:
> > > That would not be an issue should we only access the struct
> > > fields in the code, but that's not the case as we're making use of
> > > pg_memory_is_all_zeros() on it.
> > 
> > It does not hurt to keep it as it is, honestly.
> 
> I believe that's worse than before actually. Before padding bytes would "probably"
> be set to zeros while now it's certainly not always the case. I think that
> we already removed this (see comments === 4 in [1]).

We still apply the memset(), and the initialization is actually the
same.

> I think it's better to check for:
> 
>     if (pg_memory_is_all_zeros(&PendingBackendStats.pending_io,
>                                sizeof(struct PgStat_PendingIO)))
> 
> like in the attached. Or check on "backend_has_iostats" (if 0002 in [2] goes in).

Yes, restricting this check to apply on the PgStat_PendingIO makes
sense.

> I think we can use "else if" here (done in the attached) as it's not needed if
> has_pending_data is already set to true.

Still the blocks with the comments become a bit weird if formulated
this way.  Kept this one the same as v17.

And I guess that we're OK here, so applied.  That should be the last
one.
--
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