Что такое SKIP LOCKED в PostgreSQL и для чего используется?

Без SKIP LOCKED запрос будет ждать освобождения блокировки, что может привести к блокировкам и задержкам.

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

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

Без SKIP LOCKED запрос будет ждать освобождения блокировки, что может привести к блокировкам и задержкам. С SKIP LOCKED запрос сразу пропускает заблокированные строки и выбирает только доступные, что повышает параллелизм.

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

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

В PostgreSQL SKIP LOCKED — это опция для оператора SELECT ... FOR UPDATE или FOR SHARE, которая позволяет пропускать строки, уже заблокированные другими транзакциями. Это полезно для реализации конкурентной обработки задач, когда несколько воркеров выбирают записи из таблицы для обработки.

Без SKIP LOCKED запрос будет ждать освобождения блокировки, что может привести к блокировкам и задержкам. С SKIP LOCKED запрос сразу пропускает заблокированные строки и выбирает только доступные, что повышает параллелизм.

Пример:

BEGIN;
SELECT * FROM tasks WHERE status = 'pending' FOR UPDATE SKIP LOCKED LIMIT 1;
-- обработка задачи
COMMIT;

Таким образом, несколько воркеров могут одновременно брать разные задачи из таблицы, не блокируя друг друга.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку