Re: Incorrect cost for MergeAppend
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
To: Alexander Kuzmenkov <akuzmenkov@timescale.com>
Cc: pgsql-hackers@postgresql.org
Date: 2024-01-30T07:20:29Z
Lists: pgsql-hackers
On Mon, Jan 29, 2024 at 6:11 PM Alexander Kuzmenkov <akuzmenkov@timescale.com> wrote: > > Hello hackers, > > While investigating some query plans, I noticed some code that seems > to be wrong: when create_merge_append_path() estimates the cost of > sorting an input, it calls cost_sort() passing subpath->parent->tuples > as the number of tuples. Shouldn't it use subpath->parent->rows or > even subpath->rows instead? The `tuples` variable doesn't account for > the filters on the relation, so this leads to incorrect cost estimates > when there are highly selective filters, and Sort + Append is chosen > instead of MergeAppend. All other callers of cost_sort() except plan_cluster_use_sort() are using rows instead of tuples. Even plan_cluster_use_sort() has rel->rows = rel->tuples, it's actually passing rows. So agree with your suggestion. However a test will be good since this code is quite old. -- Best Wishes, Ashutosh Bapat
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix costing bug in MergeAppend
- 9d1a5354f58c 17.0 landed
-
Fix locking when fixing an incomplete split of a GIN internal page
- 6a1ea02c491d 17.0 cited