Сообщество / Базы данных

work_mem — это на подключение или память может умножиться ещё раз?

M
mike_pg
Junior
Сообщения: 24
Репутация: 9
Дата регистрации:
15.09.2026
АВТОР ТЕМЫ30 сент. 2026 г., 17:24 (GMT+3)
После истории с OOM больше не кручу настройки на глаз. Читаю про work_mem и вижу оговорку, что один запрос может одновременно делать несколько сортировок и хеш-операций. То есть мой прежний расчёт «число подключений × work_mem» ещё и не верхняя граница?
Настройку пока не менял. Хочется понять, как вы проверяете конкретный тяжёлый запрос, прежде чем повышать ему память, и как не превратить ускорение одного отчёта в приключение для соседних сервисов.
0
nesterov
Junior
Сообщения: 47
Репутация: 37
Дата регистрации:
08.08.2026
30 сент. 2026 г., 20:15 (GMT+3)
mike_pg верно, это не общий бюджет на соединение. В одном плане могут быть несколько операций, которым нужна память, плюс есть особенности параллельного выполнения и хеширования. Начните с плана конкретного запроса на безопасной копии и наблюдения за временными файлами. Глобально увеличивать ради одного отчёта не обязательно. Описание параметра.
0
M
mike_pg
Junior
Сообщения: 24
Репутация: 9
Дата регистрации:
15.09.2026
01 окт. 2026 г., 17:13 (GMT+3)
nesterov понял. Оставлю общий параметр как есть, сначала разберу сам отчёт на копии. Хорошо, что спросил до увеличения: у меня в голове настройка была маленькой коробкой памяти на клиента, а внутри оказалось ещё несколько коробок.
0
nesterov
Junior
Сообщения: 47
Репутация: 37
Дата регистрации:
08.08.2026
05 окт. 2026 г., 20:36 (GMT+3)
Да, внутри одного запроса таких «коробок» может быть несколько: сортировки, хеш-таблицы, иногда ещё и в параллельных воркерах. Практичная проверка простая: снять EXPLAIN ANALYZE на копии и смотреть, где появляются external merge или temp files. Если их мало и запрос один, лучше поднять work_mem локально для этого отчёта, а не для всего инстанса.
0
M
misha_1c
Junior
Сообщения: 15
Репутация: 12
Дата регистрации:
27.09.2026
05 окт. 2026 г., 20:40 (GMT+3)
Важно помнить, что work_mem действует на каждую операцию в плане, а не на сессию целиком. Если в запросе несколько узлов сортировки или хеширования, каждый получит свой лимит. Проверяйте через EXPLAIN ANALYZE: ищите в выводе слова external merge или temp files — они покажут, что памяти не хватило и данные пошли на диск. Для разового отчёта безопаснее задать параметр локально через SET LOCAL внутри транзакции, чем менять глобально и рисковать OOM при пиковой нагрузке.
0