select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.
Опишите риски использования `select_for_update()` внутри транзакции ORM, если запрос не ограничен по таймауту.
select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.
Задайте разумные lock_timeout и statement_timeout для операции, держите транзакцию короткой и соблюдайте порядок блокировок. Не выполняйте внешние HTTP-вызовы под lock. NOWAIT позволяет быстро отказать, SKIP LOCKED подходит некоторым очередям задач, но не любому бизнес-чтению. После ошибки транзакцию нужно корректно завершить; повтор должен быть ограниченным и безопасным. Контролируйте blockers, длительные транзакции и время ожидания, а не только CPU БД.