Что именно вы подразумеваете под «когда использовать блокировку pess.»?
Если вы имеете дело с данными, управляемыми СУБД, у вас нет выбора. СУБД использует его при каждом обновлении, полной остановке, потому что сама СУБД также не имеет возможности, если она хочет обеспечить целостность данных.
Даже системы на основе MVCC (такие как Oracle?) Не имеют другого выбора, кроме как сериализовать действия с использованием 2-фазной блокировки, чтобы правильно обрабатывать такие случаи, как:
TX A запускается, TX B запускается; TX A вставляет ID 1; TX B вставляет ID 1; TX A проверяет ограничения; TX B проверяет ограничения; TX A совершает; TX B фиксирует.
Если при проверке ограничений A / B было разрешено игнорировать вставку того же идентификатора, что и B / A, база данных в итоге нарушит ключ.
Блокировки, управляемые приложением, должны быть пессимистичными, только если вы можете быть уверены, что они не останутся в ожидании, пока пользователь ожидает ввода какого-либо ввода или около того (или когда выполняется какое-либо действие, которое потенциально может вызвать длительные задержки). ). Но это ответ на противоположный вопрос, «когда НЕ использовать».
EDIT
Индикатор «Когда его использовать» может указывать на то, что в ситуациях с высокой конкуренцией требуется «быстрый отказ» для любой транзакции, которая «идет второй». Это гарантирует, что транзакции, которые не могут быть завершены, не будут занимать слишком много ресурсов, и эти ресурсы будут доступны для более быстрого завершения (и, следовательно, более быстрого снятия блокировки) любой транзакции, которая «пришла первой» и получила блокировку. Однако осознайте, что вы также увеличиваете свои шансы попасть в тупики, и, поскольку блокировки контролируются приложением, вы должны разрешить любой тупик.