Ускорение планирования запросов с ANY — до 280 раз быстрее

#Ускорение #Когда #PostgreSQL #Время #Планировщик
Ускорение планирования запросов с ANY — до 280 раз быстрее

Когда речь заходит об оптимизации запросов в PostgreSQL, разработчики, как правило, сосредотачиваются на времени выполнения: индексы, планы запросов, настройки памяти и так далее. Время планирования остаётся в тени. А зря! Планировщик работает перед каждым выполнением запроса. Для OLTP-нагрузки с короткими транзакциями накладные расходы на планирование могут составлять значительную долю от общего времени ответа. Для запросов с большими IN -списками и высоким statistics_target планирование может занимать сотни миллисекунд, тогда как само выполнение укладывается в миллисекунды. Именно поэтому ускорение планировщика не менее важно, чем ускорение выполнения. Эта статья - о том, как мы нашли и устранили одну из таких скрытых проблем. Читать далее

Когда речь заходит об оптимизации запросов в PostgreSQL, разработчики, как правило, сосредотачиваются на времени выполнения: индексы, планы запросов, настройки памяти и так далее. Время планирования остаётся в тени. А зря! Планировщик работает перед каждым выполнением запроса. Для OLTP-нагрузки с короткими транзакциями накладные расходы на планирование могут составлять значительную долю от общего времени ответа. Для запросов с большими IN-списками и высоким statistics_target планирование может занимать сотни миллисекунд, тогда как само выполнение укладывается в миллисекунды. Именно поэтому ускорение планировщика не менее важно, чем ускорение выполнения. Эта статья - о том, как мы нашли и устранили одну из таких скрытых проблем.

Чтобы понять суть проблемы, нужно разобраться, как PostgreSQL оценивает селективность запросов. Когда планировщик строит план, ему нужно оценить, сколько строк вернёт тот или иной предикат. Для этого он опирается на статистику, которую собирает ANALYZE. Одна из ключевых структур в этой статистике - список наиболее часто встречающихся значений, MCV (Most Common Values). Для каждой колонки PostgreSQL хранит до statistics_target таких значений вместе с их частотами. По умолчанию statistics_target равен 100, но его можно увеличить - глобально через default_statistics_target или для конкретной колонки через ALTER TABLE:

statistics_target

ALTER TABLE users ALTER COLUMN status SET STATISTICS 1000;

Похожие статьи

Российская газета
Российская газета

Как швейная фабрика в Мстиславле стала одним из индустриальных флагманов

Экономический потенциал белорусско-российского сотрудничества успешно реализуется не только на уровне промышленных гигантов и крупных административных единиц, но и раскрывается в малых районных центра...

Российская газета
РИА
РИА

Движение по Крымскому мосту возобновили

Движение транспорта по Крымскому мосту возобновлено, сообщается в оперативном канале информационного центра о ситуации на автоподходах к мосту. РИА Новости, 13.08.2026

РИА
В Новосибирске ученые создали катализатор для переработки отходов в топливо РИА
РИА

В Новосибирске ученые создали катализатор для переработки отходов в топливо

Ученые из Новосибирского государственного университета и Института катализа Сибирского отделения РАН запатентовали способ создания катализатора для переработки... РИА Новости, 13.08.2026

РИА
РИА
РИА

Путин сообщил, что обсуждал боеготовность ВМФ с Белоусовым

Президент России Владимир Путин сообщил морякам крейсера

РИА
Не поверите! В Свердловской области обнаружили гриб с запахом селедки, а внутри него — молоко E1.ru
E1.ru

Не поверите! В Свердловской области обнаружили гриб с запахом селедки, а внутри него — молоко

Он созревает в конце лета

E1.ru
Аргументы и Факты
Аргументы и Факты

Число погибших после мощного землетрясения в Колумбии увеличилось до 265

Президент Колумбии Абелардо де ла Эсприэлья сообщил, что число жертв мощного землетрясения в стране достигло 265.

Аргументы и Факты