Ошибка 53200 в PostgreSQL (out_of_memory) относится к классу 53 (Insufficient Resources) и означает, что серверу не удалось выделить память для выполнения операции. За этим кодом скрываются два разных сообщения: out of memory – нехватка оперативной памяти, и out of shared memory – исчерпание разделяемой памяти под блокировки. Причина и решение у них отличаются.
Частые причины
- Завышенный work_mem при большом числе параллельных запросов: каждая сортировка и хеш берут память отдельно.
- Тяжелый запрос с крупными сортировками, хешами или агрегацией по большому объему.
- Нехватка физической памяти на сервере или активное вытеснение в swap.
- Сообщение out of shared memory – превышен лимит блокировок, заданный max_locks_per_transaction (транзакция затрагивает слишком много объектов).
Как исправить ошибку 53200
- Определите по тексту сообщения, какой это случай – нехватка RAM (out of memory) или блокировок (out of shared memory).
- При out of memory снизьте work_mem, чтобы ограничить расход памяти на операцию (можно временно для сессии):
SET work_mem = '64MB';
- Найдите запрос, вызывающий всплеск потребления, и оцените его план:
EXPLAIN ANALYZE SELECT ...;
- При out of shared memory увеличьте лимит блокировок в postgresql.conf – изменение требует перезапуска сервера:
max_locks_per_transaction = 128
- Проверьте общий расход памяти на уровне ОС (free -m, top); при системном OOM процесс может быть завершен ядром, после чего сервер уходит в восстановление.
Нехватка памяти обычно вызвана конкретными тяжелыми запросами, но в момент разбора инцидента их уже не видно в системных представлениях. PGLens ранжирует запросы по влиянию на ресурсы и хранит историческую динамику потребления, что дает структурированную картину для поиска операций, вызвавших исчерпание памяти.