Thread: pgsql: Augment EXPLAIN output with more details on Hash nodes.
pgsql: Augment EXPLAIN output with more details on Hash nodes.
From
rhaas@postgresql.org (Robert Haas)
Date:
Log Message: ----------- Augment EXPLAIN output with more details on Hash nodes. We show the number of buckets, the number of batches (and also the original number if it has changed), and the peak space used by the hash table. Minor executor changes to track peak space used. Modified Files: -------------- pgsql/src/backend/commands: explain.c (r1.199 -> r1.200) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/explain.c?r1=1.199&r2=1.200) pgsql/src/backend/executor: nodeHash.c (r1.126 -> r1.127) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/nodeHash.c?r1=1.126&r2=1.127) pgsql/src/include/executor: hashjoin.h (r1.52 -> r1.53) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/executor/hashjoin.h?r1=1.52&r2=1.53)
rhaas@postgresql.org (Robert Haas) writes: > Log Message: > ----------- > Augment EXPLAIN output with more details on Hash nodes. This needs to be damped down a bit. It should not print useless non-information in cases where the plan wasn't actually run. Please compare show_sort_info. regards, tom lane
On Mon, Feb 1, 2010 at 11:53 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > rhaas@postgresql.org (Robert Haas) writes: >> Log Message: >> ----------- >> Augment EXPLAIN output with more details on Hash nodes. > > This needs to be damped down a bit. It should not print useless > non-information in cases where the plan wasn't actually run. > Please compare show_sort_info. Eh? When does it do that? rhaas=# prepare foo as select * from pg_attribute a, pg_class c where a.attrelid = c.oid and $1; PREPARE rhaas=# explain analyze execute foo (true); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Result (cost=12.76..95.19 rows=1955 width=357) (actual time=1.972..21.777 rows=1973 loops=1) One-Time Filter: $1 -> Hash Join (cost=12.76..95.19 rows=1955 width=357) (actual time=1.960..15.679 rows=1973 loops=1) Hash Cond: (a.attrelid = c.oid) -> Seq Scan on pg_attribute a (cost=0.00..55.55 rows=1955 width=167) (actual time=0.013..2.902 rows=1973 loops=1) -> Hash (cost=9.56..9.56 rows=256 width=194) (actual time=1.828..1.828 rows=259 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 49kB -> Seq Scan on pg_class c (cost=0.00..9.56 rows=256 width=194) (actual time=0.020..0.835 rows=259 loops=1) Total runtime: 24.746 ms (9 rows) rhaas=# explain analyze execute foo (false); QUERY PLAN ------------------------------------------------------------------------------------------------- Result (cost=12.76..95.19 rows=1955 width=357) (actual time=0.003..0.003 rows=0 loops=1) One-Time Filter: $1 -> Hash Join (cost=12.76..95.19 rows=1955 width=357) (never executed) Hash Cond: (a.attrelid = c.oid) -> Seq Scan on pg_attribute a (cost=0.00..55.55 rows=1955 width=167) (never executed) -> Hash (cost=9.56..9.56 rows=256 width=194) (never executed) -> Seq Scan on pg_class c (cost=0.00..9.56 rows=256 width=194) (never executed) Total runtime: 0.292 ms (8 rows) ...Robert
Robert Haas <robertmhaas@gmail.com> writes: > On Mon, Feb 1, 2010 at 11:53 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> This needs to be damped down a bit. �It should not print useless >> non-information in cases where the plan wasn't actually run. >> Please compare show_sort_info. > Eh? When does it do that? Oh, I'm sorry, it's using hashtable existence to condition the whole output. So my complaint is backwards. I thought the intention was to print the estimated number of batches in all cases, and then the actual as well in EXPLAIN ANALYZE. BTW, I think "estimated" and "actual" would be less confusing terminology than "original". regards, tom lane