pgsql: Fix incorrect row estimates used for Memoize costing

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Fix incorrect row estimates used for Memoize costing
Дата
Msg-id E1nqS2j-000wbY-4p@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix incorrect row estimates used for Memoize costing

In order to estimate the cache hit ratio of a Memoize node, one of the
inputs we require is the estimated number of times the Memoize node will
be rescanned.  The higher this number, the large the cache hit ratio is
likely to become.  Unfortunately, the value being passed as the number of
"calls" to the Memoize was incorrectly using the Nested Loop's
outer_path->parent->rows instead of outer_path->rows.  This failed to
account for the fact that the outer_path might be parameterized by some
upper-level Nested Loop.

This problem could lead to Memoize plans appearing more favorable than
they might actually be.  It could also lead to extended executor startup
times when work_mem values were large due to the planner setting overly
large MemoizePath->est_entries resulting in the Memoize hash table being
initially made much larger than might be required.

Fix this simply by passing outer_path->rows rather than
outer_path->parent->rows.  Also, adjust the expected regression test
output for a plan change.

Reported-by: Pavel Stehule
Author: David Rowley
Discussion: https://postgr.es/m/CAFj8pRAMp%3DQsMi6sPQJ4W3hczoFJRvyXHJV3AZAZaMyTVM312Q%40mail.gmail.com
Backpatch-through: 14, where Memoize was introduced

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/23c2b76a8322233ce0b2c135c10ad52d48a4a22b

Modified Files
--------------
src/backend/optimizer/path/joinpath.c |  2 +-
src/test/regress/expected/join.out    | 26 ++++++++++----------------
2 files changed, 11 insertions(+), 17 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Fix incorrect row estimates used for Memoize costing
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: pg_upgrade: Add missing gettext triggers