Hi,
On 2025-07-23 09:54:12 +0900, Michael Paquier wrote:
> On Tue, Jul 22, 2025 at 10:57:06AM -0400, Andres Freund wrote:
> > It seems rather unsurprising that that causes a slowdown.
> >
> > The pre-check is there to:
> > /* Don't expend a clock check if nothing to do */
> >
> > but you made it way more expensive than a clock check would have been (not
> > counting old vmware installs or such, where clock checks take ages).
> >
> > If I change the loop count to only be the builtin stats kinds, the overhead
> > goes away almost completely.
>
> Noted. I was wondering originally if the threshold for the builtin
> and custom kinds should be lowered, as well. Perhaps that's just too
> optimistic, so we can first lower things. Say PGSTAT_KIND_CUSTOM_MIN
> to 32 and PGSTAT_KIND_MAX to 48 or so to begin with? I don't see a
> strict policy here, but these would make the whole cheaper to begin
> with, with enough margin for any new stats kinds.
Yes, 256 seems pointlessly large.
> Then, about the loop used here, I'd be OK to keep the past shortcuts
> for the builtin fixed-sized stats kinds with the requirement that new
> builtin stats kinds need to hack into pgstat_report_stat() themselves
> on efficiency grounds, combined with a second loop for custom kinds,
> taken only if pgstat_register_kind() has been used by tracking if
> that's the case in a flag. Do you have a specific preference here?
I think the downstream approach of having a flag that says if there are *any*
pending stats is better.
Greetings,
Andres Freund