Re: Pluggable cumulative statistics

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Andres Freund <andres@anarazel.de>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-07-04T23:27:12Z
Lists: pgsql-hackers
On Thu, Jul 04, 2024 at 02:00:47PM -0700, Andres Freund wrote:
> On 2024-06-13 16:59:50 +0900, Michael Paquier wrote:
>> * Making custom stats data persistent is an interesting problem, and
>> there are a couple of approaches I've considered:
>> ** Allow custom kinds to define callbacks to read and write data from
>> a source they'd want, like their own file through a fd.  This has the
>> disadvantage to remove the benefit of c) above.
> 
> I am *strongly* against this. That'll make it much harder to do stuff like not
> resetting stats after crashes and just generally will make it harder to
> improve the stats facility further.
> 
> I think that pluggable users of the stats facility should only have control
> over how data is stored via quite generic means.

I'm pretty much on the same line here, I think.  If the redo logic is
changed, then any stats kinds pushing their stats into their own file
would need to copy/paste the same logic as the main file.  And that's
more error prone.

I can get why some people would get that they don't want some stats
kinds to never be flushed at shutdown or even read at startup.  Adding
more callbacks in this area is a separate discussion.
--
Michael

Commits

  1. injection_points: Add some fixed-numbered statistics

  2. injection_points: Add some cumulative stats for injection points

  3. Add helper routines to retrieve data for custom fixed-numbered pgstats

  4. Introduce pluggable APIs for Cumulative Statistics

  5. Switch PgStat_Kind from an enum to a uint32 type

  6. Improve comment of pgstat_read_statsfile()

  7. Add a new 'F' entry type for fixed-numbered stats in pgstats file

  8. Add PgStat_KindInfo.init_shmem_cb

  9. Use pgstat_kind_infos to write fixed shared statistics

  10. Replace hardcoded identifiers of pgstats file by #defines