Commit d22782a5 authored by Tomas Vondra's avatar Tomas Vondra

Minor improvements in Incremental Sort explain

Some places still used "Maximum" instead of "Peak" when displaying info
about sort space, so fix that. Also, add a comment clarifying why it's
correct to check the number of full/prefix sort groups.

Author: James Coleman
Discussion: https://postgr.es/m/CAPpHfds1waRZ=NOmueYq0sx1ZSCnt+5QJvizT8ndT2=etZEeAQ@mail.gmail.com
parent 4bd0ad9e
...@@ -2841,7 +2841,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo, ...@@ -2841,7 +2841,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
ExplainOpenGroup("Sort Space", memoryName.data, true, es); ExplainOpenGroup("Sort Space", memoryName.data, true, es);
ExplainPropertyInteger("Average Sort Space Used", "kB", avgSpace, es); ExplainPropertyInteger("Average Sort Space Used", "kB", avgSpace, es);
ExplainPropertyInteger("Maximum Sort Space Used", "kB", ExplainPropertyInteger("Peak Sort Space Used", "kB",
groupInfo->maxMemorySpaceUsed, es); groupInfo->maxMemorySpaceUsed, es);
ExplainCloseGroup("Sort Spaces", memoryName.data, true, es); ExplainCloseGroup("Sort Spaces", memoryName.data, true, es);
...@@ -2858,7 +2858,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo, ...@@ -2858,7 +2858,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
ExplainOpenGroup("Sort Space", diskName.data, true, es); ExplainOpenGroup("Sort Space", diskName.data, true, es);
ExplainPropertyInteger("Average Sort Space Used", "kB", avgSpace, es); ExplainPropertyInteger("Average Sort Space Used", "kB", avgSpace, es);
ExplainPropertyInteger("Maximum Sort Space Used", "kB", ExplainPropertyInteger("Peak Sort Space Used", "kB",
groupInfo->maxDiskSpaceUsed, es); groupInfo->maxDiskSpaceUsed, es);
ExplainCloseGroup("Sort Spaces", diskName.data, true, es); ExplainCloseGroup("Sort Spaces", diskName.data, true, es);
...@@ -2883,6 +2883,15 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate, ...@@ -2883,6 +2883,15 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate,
if (!es->analyze) if (!es->analyze)
return; return;
/*
* Since we never have any prefix groups unless we've first sorted a full
* groups and transitioned modes (copying the tuples into a prefix group),
* we don't need to do anything if there were 0 full groups.
*
* We still have to continue after this block if there are no full groups,
* though, since it's possible that we have workers that did real work even
* if the leader didn't participate.
*/
if (fullsortGroupInfo->groupCount > 0) if (fullsortGroupInfo->groupCount > 0)
{ {
show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es); show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es);
...@@ -2914,6 +2923,13 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate, ...@@ -2914,6 +2923,13 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate,
*/ */
fullsortGroupInfo = &incsort_info->fullsortGroupInfo; fullsortGroupInfo = &incsort_info->fullsortGroupInfo;
prefixsortGroupInfo = &incsort_info->prefixsortGroupInfo; prefixsortGroupInfo = &incsort_info->prefixsortGroupInfo;
/*
* Since we never have any prefix groups unless we've first sorted
* a full groups and transitioned modes (copying the tuples into a
* prefix group), we don't need to do anything if there were 0 full
* groups.
*/
if (fullsortGroupInfo->groupCount == 0 && if (fullsortGroupInfo->groupCount == 0 &&
prefixsortGroupInfo->groupCount == 0) prefixsortGroupInfo->groupCount == 0)
continue; continue;
......
...@@ -109,7 +109,7 @@ begin ...@@ -109,7 +109,7 @@ begin
for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop
for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop
node := jsonb_set(node, array[group_key, space_key, 'Average Sort Space Used'], '"NN"', false); node := jsonb_set(node, array[group_key, space_key, 'Average Sort Space Used'], '"NN"', false);
node := jsonb_set(node, array[group_key, space_key, 'Maximum Sort Space Used'], '"NN"', false); node := jsonb_set(node, array[group_key, space_key, 'Peak Sort Space Used'], '"NN"', false);
end loop; end loop;
end loop; end loop;
nodes := nodes || node; nodes := nodes || node;
...@@ -131,7 +131,7 @@ begin ...@@ -131,7 +131,7 @@ begin
for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop
group_stats := node->group_key; group_stats := node->group_key;
for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop
if (group_stats->space_key->'Maximum Sort Space Used')::bigint < (group_stats->space_key->'Maximum Sort Space Used')::bigint then if (group_stats->space_key->'Peak Sort Space Used')::bigint < (group_stats->space_key->'Peak Sort Space Used')::bigint then
raise exception '% has invalid max space < average space', group_key; raise exception '% has invalid max space < average space', group_key;
end if; end if;
end loop; end loop;
...@@ -546,7 +546,7 @@ select explain_analyze_without_memory('select * from (select * from t order by a ...@@ -546,7 +546,7 @@ select explain_analyze_without_memory('select * from (select * from t order by a
select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 55')); select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 55'));
jsonb_pretty jsonb_pretty
-------------------------------------------------- -------------------------------------------------
[ + [ +
{ + { +
"Sort Key": [ + "Sort Key": [ +
...@@ -567,8 +567,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ...@@ -567,8 +567,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from
"quicksort" + "quicksort" +
], + ], +
"Sort Space Memory": { + "Sort Space Memory": { +
"Average Sort Space Used": "NN",+ "Peak Sort Space Used": "NN", +
"Maximum Sort Space Used": "NN" + "Average Sort Space Used": "NN"+
} + } +
}, + }, +
"Parent Relationship": "Outer" + "Parent Relationship": "Outer" +
...@@ -720,7 +720,7 @@ select explain_analyze_without_memory('select * from (select * from t order by a ...@@ -720,7 +720,7 @@ select explain_analyze_without_memory('select * from (select * from t order by a
select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70')); select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70'));
jsonb_pretty jsonb_pretty
-------------------------------------------------- -------------------------------------------------
[ + [ +
{ + { +
"Sort Key": [ + "Sort Key": [ +
...@@ -740,8 +740,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ...@@ -740,8 +740,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from
"quicksort" + "quicksort" +
], + ], +
"Sort Space Memory": { + "Sort Space Memory": { +
"Average Sort Space Used": "NN",+ "Peak Sort Space Used": "NN", +
"Maximum Sort Space Used": "NN" + "Average Sort Space Used": "NN"+
} + } +
}, + }, +
"Presorted Groups": { + "Presorted Groups": { +
...@@ -750,8 +750,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ...@@ -750,8 +750,8 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from
"quicksort" + "quicksort" +
], + ], +
"Sort Space Memory": { + "Sort Space Memory": { +
"Average Sort Space Used": "NN",+ "Peak Sort Space Used": "NN", +
"Maximum Sort Space Used": "NN" + "Average Sort Space Used": "NN"+
} + } +
}, + }, +
"Parent Relationship": "Outer" + "Parent Relationship": "Outer" +
......
...@@ -85,7 +85,7 @@ begin ...@@ -85,7 +85,7 @@ begin
for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop
for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop
node := jsonb_set(node, array[group_key, space_key, 'Average Sort Space Used'], '"NN"', false); node := jsonb_set(node, array[group_key, space_key, 'Average Sort Space Used'], '"NN"', false);
node := jsonb_set(node, array[group_key, space_key, 'Maximum Sort Space Used'], '"NN"', false); node := jsonb_set(node, array[group_key, space_key, 'Peak Sort Space Used'], '"NN"', false);
end loop; end loop;
end loop; end loop;
nodes := nodes || node; nodes := nodes || node;
...@@ -108,7 +108,7 @@ begin ...@@ -108,7 +108,7 @@ begin
for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop for group_key in select unnest(array['Full-sort Groups', 'Presorted Groups']::text[]) t loop
group_stats := node->group_key; group_stats := node->group_key;
for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop for space_key in select unnest(array['Sort Space Memory', 'Sort Space Disk']::text[]) t loop
if (group_stats->space_key->'Maximum Sort Space Used')::bigint < (group_stats->space_key->'Maximum Sort Space Used')::bigint then if (group_stats->space_key->'Peak Sort Space Used')::bigint < (group_stats->space_key->'Peak Sort Space Used')::bigint then
raise exception '% has invalid max space < average space', group_key; raise exception '% has invalid max space < average space', group_key;
end if; end if;
end loop; end loop;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment