Опишите риски использования `select_for_update()` внутри транзакции ORM, если запрос не ограничен по таймауту.

select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.

Короткий ответ

Что ответить на собеседовании

select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.

Подробный разбор

Ответ с пояснениями

select_for_update может долго ждать конфликтующий lock, удерживая соединение и другие ресурсы транзакции. Под нагрузкой это создаёт очередь ожидания, истощение пула и каскадные timeout на уровне приложения.

Задайте разумные lock_timeout и statement_timeout для операции, держите транзакцию короткой и соблюдайте порядок блокировок. Не выполняйте внешние HTTP-вызовы под lock. NOWAIT позволяет быстро отказать, SKIP LOCKED подходит некоторым очередям задач, но не любому бизнес-чтению. После ошибки транзакцию нужно корректно завершить; повтор должен быть ограниченным и безопасным. Контролируйте blockers, длительные транзакции и время ожидания, а не только CPU БД.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее