Ytelse og spørringsoptimalisering i PostgreSQL · leksjon

Advisory locks for koordinering i applikasjoner

Lær hvordan PostgreSQLs advisory locks gir applikasjonen Deres en lettvektsmutex styrt av programmet for å koordinere jobber og beskytte kritiske seksjoner uten å låse tabellrader.

Leksjon 4 av 413 trinn

Advisory locks for koordinering i applikasjoner er en gratis leksjon i Ytelse og spørringsoptimalisering i PostgreSQL på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ytelse og spørringsoptimalisering i PostgreSQL, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ytelse og spørringsoptimalisering i PostgreSQL inneholder totalt 4 leksjoner.

Hva er rådgivende låser?

Rådgivende låser er låser der betydningen defineres fullstendig av applikasjonen. PostgreSQL knytter dem ikke til noen rad eller tabell — koden Deres avgjør hva en gitt låsnøkkel representerer.

Hvorfor bruke dem?

De passer perfekt til koordinering som ikke kan knyttes til én enkelt rad:

  • Sikre at bare én arbeider kjører en nattlig jobb
  • Serialisere tilgang til et eksternt API
  • Hindre at to prosesser importerer den samme filen

Låsnøkler

En rådgivende lås identifiseres av et 64-bits heltall eller av to 32-bits heltall. De velger selv tallene; et vanlig mønster er å hashe en tekststreng til en heltallsnøkkel.

SELECT hashtext('nightly-report');

Låser på øktnivå

pg_advisory_lock holder låsen til De frigir den eller økten avsluttes. Den blokkerer hvis en annen økt allerede holder den samme nøkkelen.

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

Prøve å låse uten blokkering

Ofte ønsker De ikke å vente. pg_try_advisory_lock returnerer true hvis den fikk låsen, og returnerer false umiddelbart hvis noen andre holder den.

SELECT pg_try_advisory_lock(42);

Mønsteret med én arbeider

En cron-utløst jobb bruker try-lock for å sikre at bare én instans kjører. Hvis den returnerer false, avslutter denne instansen ganske enkelt.

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

Låser på transaksjonsnivå

_xact_-variantene frigir låsen automatisk ved COMMIT eller ROLLBACK, slik at De ikke kan glemme å låse opp. Dette passer godt for korte kritiske seksjoner.

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

Undersøke låser som holdes

Rådgivende låser vises i pg_locks med locktype 'advisory'. Bruk dette til å finne ut hvem som holder hva.

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

Rådgivende låser sammenlignet med radlåser

Viktige forskjeller fra SELECT ... FOR UPDATE:

  • Rådgivende låser er ikke knyttet til noen rad
  • De består mellom spørringer uten å holde på radversjoner
  • Betydningen deres er utelukkende en konvensjon som applikasjonen er enig om

Fallgruver som bør unngås

Vær oppmerksom på følgende:

  • Å glemme å låse opp låser på øktnivå (foretrekk xact-varianter)
  • Nøkkelkollisjoner mellom uavhengige funksjoner — bruk navnerom for nøklene
  • Tilkoblingspoolere som gjenbruker økter og lekker låser

Låse opp øktlåser på en ryddig måte

Låser på øktnivå kan anskaffes flere ganger og må låses opp like mange ganger. Bruk hjelpefunksjonen for å låse opp alt for å fjerne alt som holdes av den gjeldende økten samtidig.

SELECT pg_advisory_unlock_all();

Hurtigsjekk

Test kunnskapene Deres om rådgivende låser.

Oppsummering

De har lært om rådgivende låser:

  • Applikasjonsdefinerte låser som ikke er knyttet til rader eller tabeller
  • Identifiseres av 64-bits nøkler eller par med 32-bits nøkler
  • Varianter på øktnivå og transaksjonsnivå som frigir låsen automatisk
  • pg_try_advisory_lock muliggjør mønstre med én arbeider
  • Bruk navnerom for nøkler, og foretrekk xact-låser for å unngå lekkasjer
Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
22
Leksjoner
88

Ofte stilte spørsmål

Er leksjonen «Advisory locks for koordinering i applikasjoner» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ytelse og spørringsoptimalisering i PostgreSQL, inkludert «Advisory locks for koordinering i applikasjoner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Ytelse og spørringsoptimalisering i PostgreSQL inneholder totalt 4 leksjoner.

Hva lærer jeg i «Advisory locks for koordinering i applikasjoner»?

Lær hvordan PostgreSQLs advisory locks gir applikasjonen Deres en lettvektsmutex styrt av programmet for å koordinere jobber og beskytte kritiske seksjoner uten å låse tabellrader. Du øver på Ytelse og spørringsoptimalisering i PostgreSQL med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Ytelse og spørringsoptimalisering i PostgreSQL?

Ingen tidligere erfaring er nødvendig. Ytelse og spørringsoptimalisering i PostgreSQL på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Advisory locks for koordinering i applikasjoner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Ytelse og spørringsoptimalisering i PostgreSQL-leksjonen?

Ja. Alle Ytelse og spørringsoptimalisering i PostgreSQL-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Forstå låser og deadlocks
  2. Identifisere og løse konflikter om låser
  3. Strategier for låsing på radnivå
  4. Advisory locks for koordinering i applikasjoner
← Tilbake til Ytelse og spørringsoptimalisering i PostgreSQL