Сценарии - Организация блокировок с пропуском заблокированных

Page / - Изменено Alexandr Fokin в 2024/06/01 13:03

Организация блокировок с пропуском заблокированных

Изменено Alexandr Fokin

в 2024/06/01 13:03

Оглавление

Пессимистичная блокировка
https://postgrespro.ru/docs/postgresql/12/functions-admin
Блокировка через основной механизм БД	Begin; select * from table FOR UPDATE SKIP LOCKED; --action Commit;
Рекомендательные блокировки	Begin; select * from table where -- (table or action key, rowKey) pg_try_advisory_xact_lock(1, id) -- or pg_try_advisory_xact_lock(1, uuid_hash(guidId)) -- action Commit;	Данный подход может комбинироваться с вышестоящим. Пример: Мы сначала отбираем батч id, чтобы потом обработать каждую запись в отдельной транзакции. Мы не хотим блокировать сами строки, но также не хотим, чтобы другой (параллельный) обработчик отбирал их к себе. Мы можем использовать рекомендательную блокировку. При этом при обработке каждой строки отдельной транзакцией мы накладываем For Update. ЗАМЕЧАНИЕ: быть аккуратнее при использовании условий с JOIN или сортировке, чтобы не блокировать больше строк, чем нужно. Postgres pg_try_advisory_lock blocks all records https://stackoverflow.com/questions/20115907/postgres-pg-try-advisory-lock-blocks-all-records select t1.id from ( SELECT t1.id, pg_catalog.pg_try_advisory_xact_lock(-1, t1.id) as locked FROM table1 AS t1 join table2 as r2 on --WHERE rules ) t1 where t1.locked LIMIT 20;

Внутренние ссылки:

Дочерние страницы:

Обратные ссылки:

Организация блокировок с пропуском заблокированных