Re: POC: GROUP BY optimization
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Alexander Korotkov <aekorotkov@gmail.com>, Andrei Lepikhov <a.lepikhov@postgrespro.ru>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>, Tomas Vondra <tomas.vondra@enterprisedb.com>, Teodor Sigaev <teodor@sigaev.ru>, David Rowley <dgrowleyml@gmail.com>, "a.rybakina" <a.rybakina@postgrespro.ru>, Белялов Дамир Наилевич <d.belyalov@postgrespro.ru>
Date: 2024-01-26T15:38:23Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Restore preprocess_groupclause()
- 505c008ca37c 17.0 landed
-
Rename PathKeyInfo to GroupByOrdering
- 0c1af2c35c7b 17.0 landed
-
Add invariants check to get_useful_group_keys_orderings()
- 91143c03d4ca 17.0 landed
-
Fix asymmetry in setting EquivalenceClass.ec_sortref
- 199012a3d844 17.0 landed
-
Multiple revisions to the GROUP BY reordering tests
- 874d817baa16 17.0 landed
-
Get rid of pg_class usage in SJE regression tests
- e1b7fde418f2 17.0 landed
-
Rename index "abc" in aggregates.sql
- b91f91870828 17.0 landed
-
Explore alternative orderings of group-by pathkeys during optimization.
- 0452b461bc40 17.0 landed
-
Generalize the common code of adding sort before processing of grouping
- 7ab80ac1caf9 17.0 landed
-
Fix out-dated comment in preprocess_groupclause()
- f6c70b81802a 15.0 landed
- 78a9af1a2764 16.0 landed
-
Force parallelism in partition_aggregate
- 2fe6b2a806f2 16.0 landed
- 01474f56981a 15.0 landed
-
Optimize order of GROUP BY keys
- db0d67db2401 15.0 landed
Robert Haas <robertmhaas@gmail.com> writes: > On Tue, Dec 26, 2023 at 10:23 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I think it's a fool's errand to even try to separate different sort >> column orderings by cost. We simply do not have sufficiently accurate >> cost information. The previous patch in this thread got reverted because >> of that (well, also some implementation issues, but mostly that), and >> nothing has happened to make me think that another try will fare any >> better. > I'm late to the party, but I'd like to better understand what's being > argued here. What I am saying is that we don't have sufficiently accurate cost information to support the sort of logic that got committed and reverted before. I did not mean to imply that it's not possible to have such info, only that it is not present today. IOW, what I'm saying is that if you want to write code that tries to make a cost-based preference of one sorting over another, you *first* need to put in a bunch of legwork to create more accurate cost numbers. Trying to make such logic depend on the numbers we have today is just going to result in garbage in, garbage out. Sadly, that's not a small task: * We'd need to put effort into assigning more realistic procost values --- preferably across the board, not just comparison functions. As long as all the comparison functions have procost 1.0, you're just flying blind. * As you mentioned, there'd need to be some accounting for the likely size of varlena inputs, and especially whether they might be toasted. * cost_sort knows nothing of the low-level sort algorithm improvements we've made in recent years, such as abbreviated keys. That's a lot of work, and I think it has to be done before we try to build infrastructure on top, not afterwards. regards, tom lane