pgsql: Fix performance hazard in REFRESH MATERIALIZED VIEWCONCURRENTLY

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix performance hazard in REFRESH MATERIALIZED VIEWCONCURRENTLY
Дата
Msg-id E1ey2Fq-0000bx-Oh@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix performance hazard in REFRESH MATERIALIZED VIEW CONCURRENTLY.

Jeff Janes discovered that commit 7ca25b7de made one of the queries run by
REFRESH MATERIALIZED VIEW CONCURRENTLY perform badly.  The root cause is
bad cardinality estimation for correlated quals, but a principled solution
to that problem is some way off, especially since the planner lacks any
statistics about whole-row variables.  Moreover, in non-error cases this
query produces no rows, meaning it must be run to completion; but use of
LIMIT 1 encourages the planner to pick a fast-start, slow-completion plan,
exactly not what we want.  Remove the LIMIT clause, and instead rely on
the count parameter we pass to SPI_execute() to prevent excess work if the
query does return some rows.

While we've heard no field reports of planner misbehavior with this query,
it could be that people are having performance issues that haven't reached
the level of pain needed to cause a bug report.  In any case, that LIMIT
clause can't possibly do anything helpful with any existing version of the
planner, and it demonstrably can cause bad choices in some cases, so
back-patch to 9.4 where the code was introduced.

Thomas Munro

Discussion: https://postgr.es/m/CAMkU=1z-JoGymHneGHar1cru4F1XDfHqJDzxP_CtK5cL3DOfmg@mail.gmail.com

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1568156d8fe1983756ac747bd5f895e5ef6a66fa

Modified Files
--------------
src/backend/commands/matview.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)


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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Remove unnecessary members from ModifyTableState and ExecInsert
Следующее
От: Andrew Dunstan
Дата:
Сообщение: pgsql: Don't use an Msys virtual path to create a tablespace