Re: Showing I/O timings spent reading/writing temp buffers in EXPLAIN

From: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
To: Julien Rouhaud <rjuju123(at)gmail(dot)com>
Cc: gkokolatos(at)pm(dot)me, Ranier Vilela <ranier(dot)vf(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, depesz(at)depesz(dot)com
Subject: Re: Showing I/O timings spent reading/writing temp buffers in EXPLAIN
Date: 2022-04-04 15:51:12
Message-ID: CAD21AoAsOhTetfaDbrpmp7Xgb=E6RHkPy1R9qvMUA8TJzEBR5g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Apr 4, 2022 at 1:30 PM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
>
> Hi,
>
> On Tue, Mar 01, 2022 at 11:35:32AM +0900, Masahiko Sawada wrote:
> > On Wed, Jan 19, 2022 at 5:52 PM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
> > >
> > > It seems that the regression tests aren't entirely stable, per cfbot:
> > > https://cirrus-ci.com/github/postgresql-cfbot/postgresql/commitfest/36/3298.
> > >
> > > The failures look like:
> > >
> > > diff -U3 /tmp/cirrus-ci-build/src/test/recovery/../regress/expected/explain.out /tmp/cirrus-ci-build/src/test/recovery/tmp_check/results/explain.out
> > > --- /tmp/cirrus-ci-build/src/test/recovery/../regress/expected/explain.out 2022-01-19 03:50:37.087931908 +0000
> > > +++ /tmp/cirrus-ci-build/src/test/recovery/tmp_check/results/explain.out 2022-01-19 03:57:41.013616137 +0000
> > > @@ -512,9 +512,10 @@
> > > I/O Timings: temp read=N.N write=N.N
> > > -> Function Scan on generate_series (cost=N.N..N.N rows=N width=N) (actual time=N.N..N.N rows=N loops=N)
> > > I/O Timings: temp read=N.N write=N.N
> > > + I/O Timings: shared/local read=N.N
> > > Planning Time: N.N ms
> > > Execution Time: N.N ms
> > > -(6 rows)
> > > +(7 rows)
> > >
> > > select explain_filter('explain (analyze, buffers, format json) select count(*) from generate_series(1, 100000)');
> > > explain_filter
> > >
> > >
> > > I don't see any obvious error in the code, so I'm wondering if it's simply
> > > the result of populating the cache with generate_series() info.
> >
> > Thank you for reporting.
> >
> > You're right, the regression test with track_io_timing = on is not
> > entirely stable because we may read catalog data during planning time,
> > resulting in an additional line in the EXPLAIN output. I've removed
> > the regression tests.
>
> Hmm, but AFAICS the json format would be stable as the counters are always
> shown even if zero. So just doing the json format first and then the text
> format should also work. Although if you're really unlucky there could be a
> cache invalidation in between so we could just ignore the text format. But I
> think we should at least keep a regression test with the json format, with a
> comment explain why only this one is tested.

Fair point. By commit 7e12256b478 we disabled track_io_timing, but
probably we can temporarily enable it and run one query with "buffers"
and "format json" options.

>
> > I've attached updated patches. I've included an improvement of
> > pg_stat_statement support to support temp I/O timing.
>
> Great!
>
> Some other considerations:
>
> - should we update pg_stat_statements documentation (and comments) for
> blk_(read|write)_time to mention that it's for *data file* blocks rather than
> simply blocks? It seems obvious now that we'd have
> temp_blk_(read|write)_time, but still. This part should probably be
> backpatched.

Agreed.

>
> - not really your patch fault I guess, but I see that extendBufFile() isn't
> handled. There shouldn't be much activity there so maybe it's ok.
> This is likely because smgr_extend is also not handled, but this one seems
> much more likely to take quite some time, and therefore should bump the
> timing counters.

You mean we should include the time for opening files as write time?
IIUC smgrextend() writes data while extending file whereas
extendBufFile() doesn't do that but just opens a new file.

Regards,

--
Masahiko Sawada
EDB: https://www.enterprisedb.com/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Stark 2022-04-04 15:54:23 Re: JSON constructors and window functions
Previous Message Mark Dilger 2022-04-04 15:47:46 Re: Granting SET and ALTER SYSTE privileges for GUCs