Главная / Справочник ошибок / PostgreSQL
PostgreSQL в контейнере не хватает /dev/shm
ERROR: could not resize shared memory segment "/PostgreSQL.1234567" to 4194304 bytes: No space left on device
could not resize shared memory segment, No space left on device у PostgreSQL в Docker: запросам с параллельным выполнением не хватает /dev/shm, который в контейнере равен 64 МБ.
Что это значит
Место на диске здесь ни при чём. PostgreSQL для параллельных запросов берёт память в /dev/shm. В контейнере Docker этот раздел по умолчанию всего 64 МБ. Тяжёлый запрос с параллельными исполнителями его переполняет и падает, остальные запросы работают.
Ошибка появляется на отчётах, поиске по большим спискам и других запросах, где планировщик выбирает параллельное выполнение.
Как проверить
docker exec <контейнер> df -h /dev/shm
Размер 64M подтверждает причину.
Что сделать
- Увеличить раздел при запуске контейнера: ключ
--shm-size=1gили строкаshm_size: 1gbв файле compose. Нужно пересоздать контейнер, данные при этом остаются на томе. - В Kubernetes смонтировать в
/dev/shmтомemptyDirсmedium: Memory. - Временная мера без пересоздания:
max_parallel_workers_per_gather = 0. Запросы перестанут падать, но тяжёлые станут медленнее.
Размер /dev/shm входит в лимит памяти контейнера, учитывайте его в лимите.