Почему устанавливают join_collapse_limit = 20
OlegIct 10 минут назад Почему устанавливают join_collapse_limit = 20 Сложный 8 мин 97 PostgreSQL * Аналитика В обсуждении под статьями "СУБД Tantor Postgres 18: обзор улучшений для 1С" и "В погоне за APDEX-ом, или как...
Значимый прорыв формирует отрасль ИИ: OlegIct 10 минут назад Почему устанавливают join_collapse_limit = 20 Сложный 8 мин 97 PostgreSQL * Аналитика В обсуждении под статьями "СУБД Tantor Postgres 18: обзор улучшений для 1С" и "В погоне за APDEX-ом, или как создать HighLoad на недорогом серверном железе" чрезвычайно уважаемые люди задались вопросом про *_collapse_limit и его отношение к geqo_threshold. В сообществе обсуждали эти параметры в большом топике, в этой статье коротко описано то, к чему там пришли. Число 20 взялось из поста Роберта Хааса 2009 года по то, можно ли что-то сделать с параметрами *_collapse_limit в PostgreSQL версии 8.
5, которая в то время выходила. Техника добавления OFFSET 0 взялась из того же обсуждения. В 2009 году Хаас предложил увеличить geqo_threshold до 16 и *_collapse_limit до 12 (сделать булевыми или вообще убрать), и спросил мнение практиков.
Технические детали
GEQO появился в PostgreSQL 19 февраля 1997 года. Практик, Кевин Гриттнер, написал: у нас отключен geqo, и мы установили _collapse_limit на 20. Вероятно, нам следует просто установить их на несколько сотен и не ждать, пока какой-нибудь запрос с более чем 20 таблицами начнет работать плохо, но я не уверен, что у нас пока есть такие запросы.
По его опыту, в тех случаях, когда увеличение _collapse_limit хоть как-то влияло на результат, это всегда приводило к созданию плана, который экономил больше времени, чем дополнительное время на планирование. Роберт Хаас выразил суть параметров: параметры join_collapse_limit и from_collapse_limit ограничивают порядок объединения. Если все оценки верны, установка их значения < бесконечности либо оставит планы неизменными, либо ухудшит их.
Если же они улучшат планы, значит, оценки неверны, и ограничение порядка объединения мешает планировщику учитывать случаи, которые действительно наносят ущерб. Но это в основном дело случая. То есть что 20, что 100 разницы нет, если оценки верны.
Отраслевые последствия
Сделать булевыми хотели, чтобы можно было сделать порядок соединения точно таким, как в запросе. Том Лейн написал, что *_collapse_limit были добавлены исключительно на основе предположения, что кому-то они могут пригодиться. Том не против удаления join_collapse_limit или сведения его к логическому значению.
Альваро Эррера никогда не сталкивался со случаями, когда collapse_limits были бы полезными инструментами. Ноа Миш донес миру то, что добавление статистически неразличимых столбцов на PostgreSQL 8. 3 он наблюдает увеличение времени планировании и памяти в 4 раза (В PostgreSQL 18 в 3.
x раз или, как абсолютно правильно пишет Андрей Лепихов "сверхэкспоненциально и привел пример соединения 16 таблиц. А для запросов с 19-21 соединениями, пришлось отключить детерминизм (включить GEQO),так как планирование длилось более, чем 600 секунд и использовало на этапе планирвания более 10 Гб памяти. Ноа Миш никогда не сталкивался с ситуацией, когда значение, отличное от 1 или "бесконечность", для *_collapse_limit, оказалось бы оптимальным.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





