Re: RFC: Allow EXPLAIN to Output Page Fault Information
Jelte Fennema-Nio <postgres@jeltef.nl>
From: Jelte Fennema-Nio <postgres@jeltef.nl>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Andres Freund <andres@anarazel.de>,
torikoshia <torikoshia@oss.nttdata.com>, pgsql-hackers@postgresql.org, rjuju123@gmail.com, Bruce Momjian <bruce@momjian.us>
Date: 2025-02-09T20:06:02Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Avoid leaking system path from pg_available_extensions
- db5ed03217b9 19 (unreleased) cited
-
Enable BUFFERS with EXPLAIN ANALYZE by default
- c2a4078ebad7 18.0 cited
On Sun, 9 Feb 2025 at 19:05, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Andres Freund <andres@anarazel.de> writes: > > I'm somewhat against this patch, as it's fairly fundamentally incompatible > > with AIO. There's no real way to get information in this manner if the IO > > isn't executed synchronously in process context... Hmm, I had not considered how this would interact with your AIO work. I agree that getting this info would be hard/impossible to do efficiently, when IOs are done by background IO processes that interleave IOs from different queries. But I'd expect that AIOs that are done using iouring would be tracked correctly without having to change this code at all (because I assume those are done from the query backend process). One other thought: I think the primary benefit of this feature is being able to see how many read IOs actually hit the disk, as opposed to hitting OS page cache. That benefit disappears when using Direct IO, because then there's no OS page cache. How many years away do you think that widespread general use of AIO+Direct IO is, though? I think that for the N years from now until then, it would be very nice to have this feature to help debug query performance problems. Then once the numbers become too inaccurate/useless at some point, we could simply remove them again. > Even without looking ahead to AIO, there's bgwriter, walwriter, and > checkpointer processes that all take I/O load away from foreground > processes. I don't really believe that this will produce useful > numbers. The bgwriter, walwriter, and checkpointer should only take away *write* IOs. For read IOs the numbers should be very accurate and as explained above read IOs is where I think the primary benefit of this feature is. But even for write IOs I think the numbers would be useful when looking at them with the goal of finding out why a particular query is slow: If the bgwriter or checkpointer do the writes, then the query should be roughly as fast as if no writes to the disk had taken place at all, but if the query process does the writes then those writes are probably blocking further execution of the query and thus slowing it down.