Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Bazy danych
Bazy danychhard

Optimistic vs pessimistic locking — jaka jest różnica?

Tagi
#locking#optimistic#pessimistic#concurrency
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

Optimistic locking zakłada rzadkie konflikty: aktualizujesz z kontrolą wersji/timestamp i robisz retry przy konflikcie. Pessimistic locking blokuje wiersze z góry (np. `SELECT ... FOR UPDATE`), żeby inni nie mogli ich zmienić.

SELECT *
FROM accounts
WHERE id = 1
FOR UPDATE;

Odpowiedź zaawansowana

Głębiej

Oba podejścia chronią przed lost update przy współbieżności, ale „psują się” inaczej.

Optimistic locking

  • Bez locka na start.
  • Przy update sprawdzasz „czy wciąż aktualizuję tę wersję, którą odczytałem”.
  • Jeśli ktoś zdążył zmienić, update dotknie 0 wierszy → retry albo abort.

Przykład:

UPDATE accounts
SET balance = balance - 10, version = version + 1
WHERE id = 1 AND version = 7;

Dobre gdy:

  • konflikty są rzadkie,
  • chcesz wysokiej przepustowości,
  • możesz bezpiecznie robić retry.

Pessimistic locking

  • Najpierw blokujesz wiersz(e) (np. `SELECT ... FOR UPDATE`).
  • Inni będą czekać (albo dostaną błąd) do commitu/rollbacku.

Dobre gdy:

  • konflikty są częste,
  • reguły biznesowe wymagają ścisłej sekwencji,
  • retry jest kosztowne.

Typowe pułapki

  • Optimistic locking bez bezpiecznej logiki retry/idempotencji.
  • Pessimistic lock trzymany zbyt długo (deadlocki, spadek współbieżności).

Powiązane pytania

Bazy danych
Co to jest deadlock w bazie i jak go ograniczać?
#deadlock#locking#transactions
Bazy danych
Co to jest poziom izolacji transakcji (i po co)?
#transactions#isolation#concurrency
Testowanie
Jak testujesz kod asynchroniczny lub współbieżny?
#async#concurrency
  • Różna kolejność lockowania w różnych ścieżkach (ryzyko deadlock).
  • #determinism
    Systemy operacyjne
    Co powoduje deadlocki i jak im zapobiegać?
    #deadlock#locks#concurrency
    Systemy operacyjne
    Procesy vs wątki — jaka jest różnica i kiedy to ma znaczenie?
    #processes#threads#concurrency
    PostgreSQL
    MVCC w Postgresie: dlaczego odczyty nie blokują zapisów?
    #postgres#mvcc#concurrency