-
Notifications
You must be signed in to change notification settings - Fork 4
database SELECT FOR UPDATE SKIP LOCKED
ghdrako edited this page Aug 9, 2026
·
2 revisions
Klauzula ta jest używana w bazach danych (np. PostgreSQL, MySQL, Oracle) podczas operacji współbieżnych. Standardowe zapytanie SELECT ... FOR UPDATE blokuje wiersze do momentu zakończenia transakcji, co oznacza, że inne procesy muszą czekać w kolejce. Dodanie modyfikatora SKIP LOCKED sprawia, że baza danych pomija wiersze, które są obecnie zablokowane przez inne transakcje, i zwraca tylko te, które są natychmiast dostępne.
W systemie kolejkowym działa to w następujący sposób:
- Brak przestojów (non-blocking): Gdy worker próbuje pobrać zadanie za pomocą SELECT ... FOR UPDATE SKIP LOCKED, baza danych sprawdza, które wiersze są obecnie przetwarzane przez inne workery.
- Pominięcie zajętych: Zamiast czekać (wstrzymywać wątek), aż inne transakcje zwolnią wiersze, baza po prostu je ignoruje i zwraca pierwsze wolne zadanie, które nie jest w tej chwili zablokowane.
- Bezpieczeństwo współbieżności: Ponieważ zapytanie używa FOR UPDATE, ten jeden, wybrany wiersz zostaje natychmiast zablokowany dla innych, dzięki czemu żaden inny worker nie pobierze tego samego zadania.
Test