DBAtlas · Атлас эксплуатации баз данных

55P03: lock_not_available

PostgreSQL

Что это значит?

Запрошенную блокировку не удалось получить немедленно. Обычно это происходит, когда блокировка запрашивается с NOWAIT, пока её удерживает кто-то другой, или когда истекает lock_timeout.

Почему возникает?

Строка/таблица заблокирована при использовании SELECT ... FOR UPDATE NOWAIT или LOCK TABLE ... NOWAIT либо истёк lock_timeout. Чаще всего блокировку удерживает длительная транзакция.

Как исправить

Найдите блокирующую сессию: соедините pg_locks и pg_stat_activity (связь ожидающий/блокирующий). Завершите длительную транзакцию или при необходимости прервите её с помощью pg_terminate_backend(pid). Вместо NOWAIT ждите с разумным lock_timeout и добавьте логику повтора. Укорачивайте транзакции, чтобы сократить время удержания блокировок.

Открыть в DBAtlas →

Ещё по этой СУБД