Добавить в корзинуПозвонить
Найти в Дзене
Postgres DBA

planner_upper_limit_estimation - описание

Параметр planner_upper_limit_estimation — это специализированный инструмент тонкой настройки оптимизатора запросов, который появился исключительно в российской СУБД Postgres Pro Enterprise, начиная с версии 16. В стандартном PostgreSQL он отсутствует.
Параметр решает фундаментальную проблему планировщика: для ускорения работы он по умолчанию предполагает, что значения в столбцах распределены
Оглавление

Параметр planner_upper_limit_estimation — это специализированный инструмент тонкой настройки оптимизатора запросов, который появился исключительно в российской СУБД Postgres Pro Enterprise, начиная с версии 16. В стандартном PostgreSQL он отсутствует.

⚙️ Назначение параметра

Параметр решает фундаментальную проблему планировщика: для ускорения работы он по умолчанию предполагает, что значения в столбцах распределены равномерно. Это приводит к некорректным планам выполнения, когда в запросах используются фильтры с неизвестными на этапе планирования значениями (например, параметризованные запросы или переменные), а сами данные распределены неравномерно.

Если параметр включен (on), планировщик в подобных ситуациях:

  • Намеренно завышает оценку ожидаемого количества строк для выражений со сравнением с неизвестной константой.
  • Изменяет стратегию, начиная предполагать не равномерное, а неравномерное распределение данных. Это позволяет выбрать более подходящий и эффективный план, например, использовать сканирование по индексу вместо последовательного перебора всей таблицы.

🧠 Когда и для чего это нужно?

Этот механизм особенно полезен для приложений, использующих платформу «1С:Предприятие». Приложения «1С» часто генерируют параметризованные запросы, у которых на этапе планирования нет конкретных значений для оценки селективности. В ряде случаев это приводило к серьезным проблемам с производительностью.

⚠️ Важные факты и рекомендации

  • Значение по умолчанию: off (выключен).
  • Риски при использовании: Включение параметра в некоторых конфигурациях вызывало аномальный рост дисковой активности, увеличение показателя cache_resets (сбросов разделяемого кэша) и общую деградацию производительности ввода-вывода.
  • Рекомендация: Для большинства систем безопасно и правильно оставлять значение off. Включать его стоит осознанно и адресно, только после анализа планов конкретных проблемных запросов, например, с помощью расширения pg_stat_statements.

Важное дополнение: Эффективность параметра может зависеть от статистики. В некоторых случаях для корректной работы планировщика вместе с planner_upper_limit_estimation может потребоваться предварительное отключение автоматического сбора статистики (online_analyze).