diff options
author | Robert Haas <rhaas@postgresql.org> | 2014-01-13 14:42:16 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2014-01-13 14:42:16 -0500 |
commit | 2bb1f14b89deacd1142b4a06bcb1a52a76270449 (patch) | |
tree | bf36adfe14e71c70c621d8db66c92978927afb07 /src/backend/commands/explain.c | |
parent | c3ccc9ee584b9b015dd9c1931e261e21f3961e5f (diff) | |
download | postgresql-2bb1f14b89deacd1142b4a06bcb1a52a76270449.tar.gz postgresql-2bb1f14b89deacd1142b4a06bcb1a52a76270449.zip |
Make bitmap heap scans show exact/lossy block info in EXPLAIN ANALYZE.
Etsuro Fujita
Diffstat (limited to 'src/backend/commands/explain.c')
-rw-r--r-- | src/backend/commands/explain.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 7097eff9b11..e604be31f9d 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -85,6 +85,8 @@ static void show_sort_group_keys(PlanState *planstate, const char *qlabel, List *ancestors, ExplainState *es); static void show_sort_info(SortState *sortstate, ExplainState *es); static void show_hash_info(HashState *hashstate, ExplainState *es); +static void show_tidbitmap_info(BitmapHeapScanState *planstate, + ExplainState *es); static void show_instrumentation_count(const char *qlabel, int which, PlanState *planstate, ExplainState *es); static void show_foreignscan_info(ForeignScanState *fsstate, ExplainState *es); @@ -1250,7 +1252,13 @@ ExplainNode(PlanState *planstate, List *ancestors, if (((BitmapHeapScan *) plan)->bitmapqualorig) show_instrumentation_count("Rows Removed by Index Recheck", 2, planstate, es); - /* FALL THRU */ + show_scan_qual(plan->qual, "Filter", planstate, ancestors, es); + if (plan->qual) + show_instrumentation_count("Rows Removed by Filter", 1, + planstate, es); + if (es->analyze) + show_tidbitmap_info((BitmapHeapScanState *) planstate, es); + break; case T_SeqScan: case T_ValuesScan: case T_CteScan: @@ -1879,6 +1887,29 @@ show_hash_info(HashState *hashstate, ExplainState *es) } /* + * If it's EXPLAIN ANALYZE, show exact/lossy pages for a BitmapHeapScan node + */ +static void +show_tidbitmap_info(BitmapHeapScanState *planstate, ExplainState *es) +{ + if (es->format != EXPLAIN_FORMAT_TEXT) + { + ExplainPropertyLong("Exact Heap Blocks", planstate->exact_pages, es); + ExplainPropertyLong("Lossy Heap Blocks", planstate->lossy_pages, es); + } + else + { + appendStringInfoSpaces(es->str, es->indent * 2); + appendStringInfoString(es->str, "Heap Blocks:"); + if (planstate->exact_pages > 0) + appendStringInfo(es->str, " exact=%ld", planstate->exact_pages); + if (planstate->lossy_pages > 0) + appendStringInfo(es->str, " lossy=%ld", planstate->lossy_pages); + appendStringInfoChar(es->str, '\n'); + } +} + +/* * If it's EXPLAIN ANALYZE, show instrumentation information for a plan node * * "which" identifies which instrumentation counter to print |