public inbox for [email protected]  
help / color / mirror / Atom feed
From: Bertrand Drouvot <[email protected]>
To: Nazir Bilal Yavuz <[email protected]>
Cc: Michael Paquier <[email protected]>
Cc: Alvaro Herrera <[email protected]>
Cc: Kyotaro Horiguchi <[email protected]>
Cc: [email protected]
Subject: Re: per backend I/O statistics
Date: Wed, 15 Jan 2025 08:30:20 +0000
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAN55FZ0ZQTf-D+5Rup4H6zp+n3E2EuonYuzTiPkp=1GhesZU_A@mail.gmail.com>
References: <[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<CAN55FZ0ZQTf-D+5Rup4H6zp+n3E2EuonYuzTiPkp=1GhesZU_A@mail.gmail.com>

Hi,

On Wed, Jan 15, 2025 at 11:03:54AM +0300, Nazir Bilal Yavuz wrote:
> Hi,
> 
> On Thu, 19 Dec 2024 at 07:22, Michael Paquier <[email protected]> wrote:
> >
> > Fixed that, bumped the two version counters, and done.
> 
> I encountered a problem while trying to add WAL stats to pg_stat_io
> and I wanted to hear your thoughts.
> 
> Right now, pgstat_prep_backend_pending() is called in both
> pgstat_count_io_op() and pgstat_count_io_op_time() to create a local
> PgStat_BackendPending entry. In that process,
> pgstat_prep_pending_entry() -> MemoryContextAllocZero() is called. The
> problem is that MemoryContextAllocZero() can not be called in the
> critical sections.
> 
> For example, here is what happens in the walsender backend:
> 
> '''
> ... ->
> exec_replication_command() ->
> SendBaseBackup() ->
> ...  ->
> XLogInsertRecord() ->
> START_CRIT_SECTION() /* Now we are in the critical section */ ->
> ... ->
> XLogWrite() ->
> pgstat_count_io_op_time() for the pg_pwrite() IO ->
> pgstat_prep_backend_pending() ->
> pgstat_prep_pending_entry() ->
> MemoryContextAllocZero() ->
> Failed at Assert("CritSectionCount == 0 || (context)->allowInCritSection")
> '''
> 
> With this commit it may not be possible to count IOs in the critical
> sections. I think the problem happens only if the local
> PgStat_BackendPending entry is being created for the first time for
> this backend in the critical section.

Yeah, I encountered the exact same thing and mentioned it in [1] (see R1.).

In [1] I did propose to use a new PendingBackendWalStats variable to "bypass" the
pgstat_prep_backend_pending() usage.

Michael mentioned in [2] that is not really consistent with the rest (what I
agree with) and that "we should rethink a bit the way pending entries are
retrieved". I did not think about it yet but that might be the way to
go, thoughts? 

[1]: https://www.postgresql.org/message-id/Z3zqc4o09dM/Ezyz%40ip-10-97-1-34.eu-west-3.compute.internal
[2]: https://www.postgresql.org/message-id/Z4dRlNuhSQ3hPPv2%40paquier.xyz

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com






view thread (39+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: per backend I/O statistics
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox