Re: Calculate total_table_pages after set_base_rel_sizes()
Edmund Horner <ejrh00@gmail.com>
From: Edmund Horner <ejrh00@gmail.com>
To: David Rowley <david.rowley@2ndquadrant.com>
Cc: PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2018-10-06T05:20:37Z
Lists: pgsql-hackers
David Rowley said: > I believe that we should be delaying the PlannerInfo's > total_table_pages calculation until after constraint exclusion and > partition pruning have taken place. Doing this calculation before we > determine which relations we don't need to scan can lead to > incorrectly applying random_page_cost to too many pages processed > during an Index Scan. > > We already don't count relations removed by join removals from this > calculation, so counting pruned partitions seems like an omission. > > The attached patch moves the calculation to after set_base_rel_sizes() > is called and before set_base_rel_pathlists() is called, where the > information is actually used. > > I am considering this a bug fix, but I'm proposing this for PG12 only > as I don't think destabilising plans in the back branches is a good > idea. I'll add this to the September commitfest. I played with the new patched today with a set of large partitions. It seems to work, though the effect is subtle. The expected behaviour of index_pages_fetched is a bit hard to fathom when the cache share pushes it between cases A,B and C of the formula, but that's not really down to this patch. Basically I think it's ready for a committer to look at. Should I update the CF entry? Edmund
Commits
-
Postpone calculating total_table_pages until after pruning/exclusion.
- c6e4133fae1f 12.0 landed