Copy/paste
or Choose File
and click Submit
.
Note: No data is stored unless you click the "Save Plan" button on the results page.
The following are some best practices for using PlanChecker.
EXPLAIN ANALYZE
so PlanChecker can give more details results.Slice statistics
, Statement statistics
, Settings
, etc... Show Example
repro=# EXPLAIN ANALYZE SELECT * FROM table1 t1, table2 t2 WHERE t1.col1 = t2.col2; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 4:1 (slice2; segments: 4) (cost=114.00..451.00 rows=10000 width=16) Rows out: 10000 rows at destination with 6.146 ms to first row, 13 ms to end, start offset by 0.616 ms. -> Hash Join (cost=114.00..451.00 rows=2500 width=16) Hash Cond: t2.col2 = t1.col1 Rows out: Avg 2500.0 rows x 4 workers. Max 2501 rows (seg2) with 7.449 ms to first row, 8.642 ms to end, start offset by 1.391 ms. Executor memory: 32K bytes avg, 32K bytes max (seg0). Work_mem used: 32K bytes avg, 32K bytes max (seg0). Workfile: (0 spilling, 0 reused) (seg2) Hash chain length 1.0 avg, 1 max, using 1000 of 524341 buckets. -> Seq Scan on table2 t2 (cost=0.00..112.00 rows=2500 width=8) Rows out: Avg 2500.0 rows x 4 workers. Max 2501 rows (seg2) with 0.023 ms to first row, 0.182 ms to end, start offset by 8.815 ms. -> Hash (cost=64.00..64.00 rows=1000 width=8) Rows in: Avg 1000.0 rows x 4 workers. Max 1000 rows (seg0) with 0.369 ms to end, start offset by 12 ms. -> Broadcast Motion 4:4 (slice1; segments: 4) (cost=0.00..64.00 rows=1000 width=8) Rows out: Avg 1000.0 rows x 4 workers at destination. Max 1000 rows (seg0) with 0.042 ms to first row, 0.212 ms to end, start offset by 12 ms. -> Seq Scan on table1 t1 (cost=0.00..14.00 rows=250 width=8) Rows out: Avg 250.0 rows x 4 workers. Max 251 rows (seg2) with 0.727 ms to first row, 0.749 ms to end, start offset by 3.875 ms. Slice statistics: (slice0) Executor memory: 386K bytes. (slice1) Executor memory: 207K bytes avg x 4 workers, 207K bytes max (seg0). (slice2) Executor memory: 8488K bytes avg x 4 workers, 8488K bytes max (seg0). Work_mem: 32K bytes max. Statement statistics: Memory used: 128000K bytes Settings: optimizer=off Optimizer status: legacy query optimizer Total runtime: 14.718 ms (25 rows)
$ cat myquery.sql EXPLAIN ANALYZE SELECT * FROM mytable WHERE date = '1955-11-05' AND location = 'Hill Valley';
$ psql -f myquery.sql > myquery.out
Choose File
, select myquery.out
, click Submit
Note: When using pgAdmin each line of the output will be enclosed in doublequotes.
This is the expected format. Please do not modify it.
pgAdmin
.SQL Editor
screen.EXPLAIN ANALYZE
:
EXPLAIN ANALYZE SELECT * FROM mytable WHERE date = '1955-11-05' AND location = 'Hill Valley';
Data Output
tab click the QUERY PLAN text
column header to select all the text.Submit
.Here are the current checks:
Description | Optimizer | Added |
---|---|---|
Scan node with estimated rows equal to 1 | orca legacy | 2016-05-24 |
Nested Loops | orca legacy | 2016-05-23 |
Spill files | orca legacy | 2016-05-31 |
Node looping multiple times | orca legacy | 2016-05-31 |
Number of partition scans greater than 100 or 25% | orca legacy | 2016-05-31 |
Data skew | orca legacy | 2016-06-02 |
Filter clause using function | orca legacy | 2016-06-06 |
Number of Broadcast/Redistribute Motion nodes greater than 5 | orca legacy | 2016-05-23 |
Number of slices greater than 100 | orca legacy | 2016-05-31 |
ORCA fallback to legacy query planner | orca | 2016-05-31 |
"enable_" GUCs configured with non-default values | orca legacy | 2016-06-06 |
Scan on child partition instead of root partition | orca | 2016-06-08 |
New checks may be added in future.
PlanChecker parses EXPLAIN
or EXPLAIN ANALYZE
output generated from Greenplum database and checks for common issues which may affect query performance.
While the query plans look similar to PostgreSQL they are formatted differently and contain nodes which are specific to Greenplum.
Because Greenplum and Apache HAWQ share similar codebase, PlanChecker should also work with Apache HAWQ query plans.