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
This commit is contained in:
parent
4bd0ad9e44
commit
d22782a539
@ -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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
*/
|
*/
|
||||||
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
|
|||||||
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
|
|||||||
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;
|
||||||
@ -545,34 +545,34 @@ select explain_analyze_without_memory('select * from (select * from t order by a
|
|||||||
(9 rows)
|
(9 rows)
|
||||||
|
|
||||||
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": [ +
|
||||||
"t.a", +
|
"t.a", +
|
||||||
"t.b" +
|
"t.b" +
|
||||||
], +
|
], +
|
||||||
"Node Type": "Incremental Sort", +
|
"Node Type": "Incremental Sort", +
|
||||||
"Actual Rows": 55, +
|
"Actual Rows": 55, +
|
||||||
"Actual Loops": 1, +
|
"Actual Loops": 1, +
|
||||||
"Presorted Key": [ +
|
"Presorted Key": [ +
|
||||||
"t.a" +
|
"t.a" +
|
||||||
], +
|
], +
|
||||||
"Parallel Aware": false, +
|
"Parallel Aware": false, +
|
||||||
"Full-sort Groups": { +
|
"Full-sort Groups": { +
|
||||||
"Group Count": 2, +
|
"Group Count": 2, +
|
||||||
"Sort Methods Used": [ +
|
"Sort Methods Used": [ +
|
||||||
"top-N heapsort", +
|
"top-N heapsort", +
|
||||||
"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" +
|
||||||
} +
|
} +
|
||||||
]
|
]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
@ -719,43 +719,43 @@ select explain_analyze_without_memory('select * from (select * from t order by a
|
|||||||
(9 rows)
|
(9 rows)
|
||||||
|
|
||||||
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": [ +
|
||||||
"t.a", +
|
"t.a", +
|
||||||
"t.b" +
|
"t.b" +
|
||||||
], +
|
], +
|
||||||
"Node Type": "Incremental Sort", +
|
"Node Type": "Incremental Sort", +
|
||||||
"Actual Rows": 70, +
|
"Actual Rows": 70, +
|
||||||
"Actual Loops": 1, +
|
"Actual Loops": 1, +
|
||||||
"Presorted Key": [ +
|
"Presorted Key": [ +
|
||||||
"t.a" +
|
"t.a" +
|
||||||
], +
|
], +
|
||||||
"Parallel Aware": false, +
|
"Parallel Aware": false, +
|
||||||
"Full-sort Groups": { +
|
"Full-sort Groups": { +
|
||||||
"Group Count": 1, +
|
"Group Count": 1, +
|
||||||
"Sort Methods Used": [ +
|
"Sort Methods Used": [ +
|
||||||
"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": { +
|
||||||
"Group Count": 5, +
|
"Group Count": 5, +
|
||||||
"Sort Methods Used": [ +
|
"Sort Methods Used": [ +
|
||||||
"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" +
|
||||||
} +
|
} +
|
||||||
]
|
]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
@ -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
|
|||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user