Re: Flush some statistics within running transactions
| От | Michael Paquier |
|---|---|
| Тема | Re: Flush some statistics within running transactions |
| Дата | |
| Msg-id | abeimWKYq-n34FrH@paquier.xyz обсуждение |
| Ответ на | Re: Flush some statistics within running transactions (Bertrand Drouvot <bertranddrouvot.pg@gmail.com>) |
| Ответы |
Re: Flush some statistics within running transactions
|
| Список | pgsql-hackers |
On Tue, Feb 24, 2026 at 12:01:30PM +0000, Bertrand Drouvot wrote: > Though I don't think that adresses Michael's concern: "main worries are > mainly around 1), I guess, with the new SIGALRM handler requirements for all > auxiliary processes" in [1]. FWIW, I am still concerned about that, and I have pondered about what we could do here. While reviewing the existing code, one thing that I have noticed we could do is rely on the existing interface of pgstat_report_stat() without changing the existing callers, and not touching at all the flush callbacks. If we begin to require the "force" mode when the routine the called inside a transaction block, things seem to work pretty smoothly in combination with a stats kind property that allows the stats data to be flushed if we are inside a transaction while a report happens. And it is possible to enforce checks inside pgstat_report_stat() as well. So please find attached my shot at that: - Introduction of a new system function called pg_stat_report(), based on a procsignal that gives a way to signal backends for a stats update, reusing the existing code where we only do flushes when idle and not in a transaction. - Property that tracks under which contexts the reports are allowed. Here I have decided to stick with simple, as in only allowing IO and WAL stats to be flushed if we are inside a transaction. Using that, I have done a few tests with three backends: - One with a long-running transaction. - One that periodically triggers the reports. - One that looks at IO and WAL stat. And the third session is able to get refreshes for both of these stats kinds, while the other stats remain the same. Note that this is a WIP, which is check-world stable. One thing that sticks a bit in mind now is that perhaps we should not allow the function for auxiliary processes at all. A second thing is the requirement of allowing partial flushes at the end of the report path, which is OK because the variable-sized stats can have pending data. Perhaps we should just have pgstat_flush_pending_entries() provide a correct status in line with the property set in a stats kind when we try a flush while in a transaction. Thoughts or tomatoes? -- Michael
Вложения
В списке pgsql-hackers по дате отправления: