Режим блокировки PESSIMISTIC_WRITE в критериях против выбора для обновления
Есть ли существенная разница в производительности при использовании PESSIMISTIC_WRITE в качестве LockMode в критериях гибернации в качестве альтернативы для выбора для запроса на обновление.
Вариант использования включает в себя следующие моменты:
- Ограничения на значения в нескольких столбцах, такие как статус, время
- Сортировка по нескольким столбцам
- Выберите только первый ряд для обработки.
Эта обработка выполняется одновременно несколькими машинами / потоками. В настоящее время я использую критерии гибернации, и это приводит к превышению времени ожидания получения блокировки несколько раз, что приводит к блокированию всех других запросов.
1 ответ
В этом случае FOR UPDATE
"требуется" для правильного параллелизма:
BEGIN;
SELECT x ... FROM t ... FOR UPDATE;
use `x` for whatever
UPDATE t ...;
COMMIT;
Без FOR UPDATE
, значение x
может измениться, тем самым потенциально лишает законной силы UPDATE
,