Commit eb30c19
authored
Implement disk spilling for all grouping ordering modes in GroupedHashAggregateStream (#19287)
## Which issue does this PR close?
- Closes #19286.
- Related to #13123
## Rationale for this change
GroupedHashAggregateStream currently always reports that it can spill to
the memory tracking subsystem even though this is dependent on the
aggregation mode and the grouping order.
The optimistic logic in `group_aggregate_batch` does not correctly take
the spilling preconditions into account which can lead to excessive
memory use.
In order to to resolve this, this PR implements disk spilling for all
grouping modes.
## What changes are included in this PR?
- Correctly set `MemoryConsumer::can_spill` to reflect actual spilling
behaviour
- Ensure optimistic out-of-memory tolerance in `group_aggregate_batch`
is aligned with disk spilling or early emission logic
- Implement output order respecting disk spilling for partially and
fully sorted inputs.
## Are these changes tested?
Added additional test case to demonstrate problem.
Added test case to check that output order is respected after spilling.
## Are there any user-facing changes?
Yes, memory exhaustion may be reported much earlier in the query
pipeline than is currently the case. In my local tests with a per
consumer memory limit of 32MiB, grouped aggregation would consume 480MiB
in practice. This was then reported by ExternalSortExec which choked on
trying to reserve that much memory.1 parent 6fa9c1a commit eb30c19
File tree
11 files changed
+423
-197
lines changed- datafusion
- physical-expr-common/src
- physical-plan/src
- aggregates
- group_values
- multi_group_by
- single_group_by
11 files changed
+423
-197
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
457 | 457 | | |
458 | 458 | | |
459 | 459 | | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
460 | 471 | | |
461 | 472 | | |
462 | 473 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| |||
Lines changed: 4 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
1181 | 1181 | | |
1182 | 1182 | | |
1183 | 1183 | | |
1184 | | - | |
1185 | | - | |
| 1184 | + | |
1186 | 1185 | | |
1187 | 1186 | | |
1188 | | - | |
| 1187 | + | |
1189 | 1188 | | |
1190 | 1189 | | |
1191 | | - | |
| 1190 | + | |
1192 | 1191 | | |
1193 | 1192 | | |
1194 | 1193 | | |
| |||
Lines changed: 4 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
246 | | - | |
247 | | - | |
| 246 | + | |
248 | 247 | | |
249 | 248 | | |
250 | 249 | | |
251 | 250 | | |
252 | 251 | | |
253 | | - | |
| 252 | + | |
254 | 253 | | |
255 | 254 | | |
256 | | - | |
| 255 | + | |
257 | 256 | | |
258 | 257 | | |
259 | 258 | | |
| |||
Lines changed: 1 addition & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
23 | 22 | | |
24 | 23 | | |
25 | 24 | | |
| |||
146 | 145 | | |
147 | 146 | | |
148 | 147 | | |
149 | | - | |
| 148 | + | |
150 | 149 | | |
151 | 150 | | |
152 | 151 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
123 | | - | |
| 123 | + | |
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| |||
Lines changed: 3 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
27 | 26 | | |
28 | 27 | | |
29 | 28 | | |
| |||
213 | 212 | | |
214 | 213 | | |
215 | 214 | | |
216 | | - | |
217 | | - | |
| 215 | + | |
218 | 216 | | |
219 | | - | |
| 217 | + | |
220 | 218 | | |
221 | | - | |
| 219 | + | |
222 | 220 | | |
223 | 221 | | |
0 commit comments