- Notifications
You must be signed in to change notification settings - Fork4.9k
Commit69c3936
committed
Expression evaluation based aggregate transition invocation.
Previously aggregate transition and combination functions were invokedby special case code in nodeAgg.c, evaluating input and filtersseparately using the expression evaluation machinery. That turns outto not be great for performance for several reasons:- repeated expression evaluations have some cost- the transition functions invocations are poorly predicted, as commonly there are multiple aggregates in a query, resulting in the same call-stack invoking different functions.- filter and input computation had to be done separately- the special case code made it hard to implement JITing of the whole transition function invocationAddress this by building one large expression that computes input,evaluates filters, and invokes transition functions.This leads to moderate speedups in queries bottlenecked by aggregatecomputations, and enables large speedups for similar cases once JITingis done.There's potential for further improvement:- It'd be nice if we could simplify the somewhat expensive aggstate->all_pergroups lookups.- right now there's still an advance_transition_function invocation in nodeAgg.c, leading to some code duplication.Author: Andres FreundDiscussion:https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de1 parent272c2ab commit69c3936
File tree
8 files changed
+1230
-789
lines changed- src
- backend/executor
- include
- executor
- nodes
- tools/pgindent
8 files changed
+1230
-789
lines changedLines changed: 422 additions & 7 deletions
Large diffs are not rendered by default.
Lines changed: 345 additions & 11 deletions
Large diffs are not rendered by default.
Lines changed: 98 additions & 766 deletions
Large diffs are not rendered by default.
Lines changed: 73 additions & 3 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
14 | 14 |
| |
15 | 15 |
| |
16 | 16 |
| |
| 17 | + | |
17 | 18 |
| |
18 | 19 |
| |
19 | 20 |
| |
| |||
64 | 65 |
| |
65 | 66 |
| |
66 | 67 |
| |
67 |
| - | |
68 |
| - | |
69 |
| - | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
70 | 71 |
| |
71 | 72 |
| |
72 | 73 |
| |
| |||
218 | 219 |
| |
219 | 220 |
| |
220 | 221 |
| |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
221 | 233 |
| |
222 | 234 |
| |
223 | 235 |
| |
| |||
573 | 585 |
| |
574 | 586 |
| |
575 | 587 |
| |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
576 | 637 |
| |
577 | 638 |
| |
578 | 639 |
| |
| |||
669 | 730 |
| |
670 | 731 |
| |
671 | 732 |
| |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
672 | 742 |
|
Lines changed: 3 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
192 | 192 |
| |
193 | 193 |
| |
194 | 194 |
| |
195 |
| - | |
| 195 | + | |
196 | 196 |
| |
197 | 197 |
| |
198 | 198 |
| |
| |||
254 | 254 |
| |
255 | 255 |
| |
256 | 256 |
| |
| 257 | + | |
| 258 | + | |
257 | 259 |
| |
258 | 260 |
| |
259 | 261 |
| |
|
0 commit comments
Comments
(0)