PostgreSQL Performance & Query Optimization · Lekcja

Blokady doradcze do koordynowania aplikacji

Dowiedz się, jak blokady doradcze PostgreSQL zapewniają aplikacji lekki, kontrolowany przez programistę mutex do koordynowania zadań i ochrony sekcji krytycznych bez blokowania wierszy tabeli.

Lekcja 4 z 413 kroki

Blokady doradcze do koordynowania aplikacji to bezpłatna lekcja PostgreSQL Performance & Query Optimization na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PostgreSQL Performance & Query Optimization, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

What Are Advisory Locks?

Advisory locks are locks whose meaning is defined entirely by your application. PostgreSQL does not associate them with any row or table — your code decides what a given lock key represents.

Why Use Them?

They are perfect for coordination that does not map to a single row:

  • Ensuring only one worker runs a nightly job
  • Serializing access to an external API
  • Preventing two processes from importing the same file

Lock Keys

An advisory lock is identified by a 64-bit integer, or by two 32-bit integers. You pick the numbers; a common pattern is to hash a string into an integer key.

SELECT hashtext('nightly-report');

Session-Level Locks

pg_advisory_lock holds the lock until you release it or the session ends. It blocks if another session already holds the same key.

SELECT pg_advisory_lock(42);
-- do exclusive work
SELECT pg_advisory_unlock(42);

Try-Lock Without Blocking

Often you do not want to wait. pg_try_advisory_lock returns true if it got the lock and false immediately if someone else holds it.

SELECT pg_try_advisory_lock(42);

The Single-Worker Pattern

A cron-triggered job uses try-lock to ensure only one instance runs. If it returns false, this instance simply exits.

-- if this returns false, another worker is running
SELECT pg_try_advisory_lock(hashtext('nightly-report'));

Transaction-Level Locks

The _xact_ variants release automatically at COMMIT or ROLLBACK, so you cannot forget to unlock. Great for short critical sections.

BEGIN;
SELECT pg_advisory_xact_lock(42);
-- protected work here
COMMIT; -- lock auto-released

Inspecting Held Locks

Advisory locks show up in pg_locks with locktype 'advisory'. Use it to debug who is holding what.

SELECT pid, classid, objid, granted
FROM pg_locks
WHERE locktype = 'advisory';

Advisory vs Row Locks

Key differences from SELECT ... FOR UPDATE:

  • Advisory locks are not tied to any row
  • They survive across statements without holding row versions
  • Their meaning is purely a convention your app agrees on

Pitfalls to Avoid

Watch out for:

  • Forgetting to unlock session-level locks (prefer xact variants)
  • Key collisions between unrelated features — namespace your keys
  • Connection poolers reusing sessions and leaking locks

Unlocking Session Locks Cleanly

Session-level locks can be acquired multiple times and must be unlocked the same number of times. To clear everything held by the current session at once, use the unlock-all helper.

SELECT pg_advisory_unlock_all();

Quick Check

Test your advisory lock knowledge.

Recap

You learned advisory locks:

  • Application-defined locks not tied to rows or tables
  • Identified by 64-bit or paired 32-bit keys
  • Session-level vs auto-releasing transaction-level variants
  • pg_try_advisory_lock powers single-worker patterns
  • Namespace keys and prefer xact locks to avoid leaks
Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
22
Lekcje
88

Często zadawane pytania

Czy lekcja „Blokady doradcze do koordynowania aplikacji” jest bezpłatna?

Tak — pełny tekst „Blokady doradcze do koordynowania aplikacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PostgreSQL Performance & Query Optimization, przejdź na CoddyKit PRO. Kurs PostgreSQL Performance & Query Optimization zawiera 4 lekcji w sumie.

Co nauczysz się w „Blokady doradcze do koordynowania aplikacji”?

Dowiedz się, jak blokady doradcze PostgreSQL zapewniają aplikacji lekki, kontrolowany przez programistę mutex do koordynowania zadań i ochrony sekcji krytycznych bez blokowania wierszy tabeli. Ćwiczysz PostgreSQL Performance & Query Optimization z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PostgreSQL Performance & Query Optimization?

Nie wymagamy żadnego doświadczenia. PostgreSQL Performance & Query Optimization w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Blokady doradcze do koordynowania aplikacji”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PostgreSQL Performance & Query Optimization?

Tak. Każda lekcja PostgreSQL Performance & Query Optimization zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Poznawanie blokad i zakleszczeń
  2. Identyfikowanie i rozwiązywanie problemów rywalizacji o blokady
  3. Strategie blokowania na poziomie wierszy
  4. Blokady doradcze do koordynowania aplikacji
← Powrót do PostgreSQL Performance & Query Optimization