| From: | Chengpeng Yan <chengpeng_yan(at)outlook(dot)com> |
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Andres Freund <andres(at)anarazel(dot)de> |
| Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, David Rowley <dgrowleyml(at)gmail(dot)com> |
| Subject: | Re: Unfortunate pushing down of expressions below sort |
| Date: | 2026-02-06 14:37:59 |
| Message-ID: | 988146DB-C16A-487C-8C39-656C702EF4E2@Outlook.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi,
I took a closer look at make_sort_input_target() in
src/backend/optimizer/plan/planner.c.
The current heuristics only defer targetlist expressions past a Sort
when they are:
* volatile, or
* set-returning (due to SRF synchronization constraints), or
* considered “expensive” (cost > 10 * cpu_operator_cost) and there is a
LIMIT.
Functions like repeat() and acldefault() have the default procost = 1,
so they don’t meet the “expensive” threshold and therefore remain below
the Sort, which is what leads to the tuple width inflation seen in these
examples.
Grouping behaves differently: make_group_input_target() unconditionally
flattens non-grouping expressions to Vars, which is why repeat() ends up
above the Aggregate node there.
Tom mentioned the md5(widecol) counterexample, where evaluating the
expression before the sort can actually reduce memory usage. The key
distinction seems to be whether the expression depends solely on sort
keys.
The approach I’m experimenting with is to defer an expression only when
all the Vars it depends on are sort keys. That gives the desired
behavior in both cases:
* repeat(i, 1000) ORDER BY i: i is the sort key, so we defer and keep
the sort tuples narrow.
* md5(widecol) ORDER BY id: widecol is not a sort key, so we keep the
expression below the sort and avoid carrying the wide column.
This seems to address the cases discussed in this thread and should be
low-risk for the common case.
I’m working on a patch along these lines; any thoughts?
--
Best regards,
Chengpeng Yan
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Matheus Alcantara | 2026-02-06 14:42:29 | Re: Add CREATE SCHEMA ... LIKE support |
| Previous Message | Jim Jones | 2026-02-06 14:35:09 | Re: Add CREATE SCHEMA ... LIKE support |