Re: EXPLAIN progress info - Mailing list pgsql-patches

From Heikki Linnakangas
Subject Re: EXPLAIN progress info
Date
Msg-id 47FC7D62.9090509@enterprisedb.com
Whole thread Raw
In response to Re: EXPLAIN progress info  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: EXPLAIN progress info  (Gregory Stark <stark@enterprisedb.com>)
List pgsql-patches
Tom Lane wrote:
> Gregory Stark <stark@enterprisedb.com> writes:
>> There are downsides:
>
> Insurmountable ones at that.  This one already makes it a non-starter:
>
>> a) the overhead of counting rows and loops is there for every query execution,
>> even if you don't do explain analyze.
>
> and you are also engaging in a flight of fantasy about what the
> client-side code might be able to handle.  Particularly if it's buried
> inside, say, httpd or some huge Java app.  Yeah, you could possibly make
> it work for the case that the problem query was manually executed in
> psql, but that doesn't cover very much real-world territory.

I think there's two different use cases here. The one that Greg's
proposal would be good for is a GUI, like pgAdmin. It would be cool to
see how a query progresses through the EXPLAIN tree when you run it from
the query tool. That would be great for visualizing the executor; a
great teaching tool.

But I agree it's no good for use by a DBA to monitor a live system
running a real-world application. For that we do need something else.

> You'd be far more likely to get somewhere with a design that involves
> looking from another session to see if anything's happening.  In the
> case of queries that are making database changes, pgstattuple is
> certainly a usable option.  For SELECT-only queries, I agree it's
> harder, but it's still possible.  I seem to recall some discussion of
> including a low-overhead progress counter of some kind in the
> pg_stat_activity state exposed by a backend.  The number of rows so far
> processed by execMain.c in the current query might do for the
> definition.

Yeah, something like this would be better for monitoring a live system.

The number of rows processed by execMain.c would only count the number
of rows processed by the top node of the tree, right? For a query that
for example performs a gigantic sort, that would be 0 until the sort is
done, which is not good. It's hard to come up with a single counter
that's representative :-(.

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com

pgsql-patches by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: Partial match in GIN
Next
From: Gregory Stark
Date:
Subject: Re: EXPLAIN progress info