Параллельные планы Постгреса размещают DSM-сегменты в /dev/shm
(dynamic_shared_memory_type=posix). Контейнеру БД никто не задавал shm_size,
поэтому там держалось умолчание Docker — 64 МБ, и запросы Объектива падали
с psycopg.errors.DiskFull «could not resize shared memory segment».
Текст ошибки называет НЕ тот ресурс: на разделе 28 ГБ свободно, кончался
именно /dev/shm.
Замеры на проде 2026-08-10 (не рекомендация из интернета):
постоянный расход ~9.8 МиБ (DSA кумулятивной статистики pgstat)
один параллельный ~15.4 МиБ (3 одновременных → 55.9 МиБ из 64)
→ 4-й одновременный запрос не влезает; ровно это и наблюдалось
(6 отказов за 1.2 с из двух backend-процессов)
Нижняя граница: 128 МиБ покрывают лишь ~7-8 одновременных, а потолок
celery (--concurrency=8) плюс request-path даёт ~12 → минимум 256 МиБ.
Верхняя: /dev/shm это tmpfs, страницы выделяются по факту, поэтому
значение — потолок, а не резерв; на хосте 11 ГиБ RAM (свободно ~6),
2 ГиБ я бы не переходил. 1 ГиБ = ~65 таких запросов, ~5x запаса.
Локальная проверка A/B (postgres:16, GUC как на проде, различается только
--shm-size): 6 одновременных параллельных запросов
64m → 4 отказа, пик 57.3 МиБ (упёрлись в лимит)
1g → 0 отказов, пик 113.3 МиБ (реальный спрос вдвое выше 64 МиБ)
Refs #2812