Параметр 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).