Prestandaoptimering och frågeoptimering i PostgreSQL · Lektion

Advisory locks för samordning i applikationer

Lär Er hur PostgreSQL:s advisory locks ger applikationen en lättviktig, programmerarstyrd mutex för att samordna jobb och skydda kritiska sektioner utan att låsa tabellrader.

Lektion 4 av 413 steg

Advisory locks för samordning i applikationer är en gratis lektion i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Prestandaoptimering och frågeoptimering i PostgreSQL, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Prestandaoptimering och frågeoptimering i PostgreSQL innehåller totalt 4 lektioner.

Vad är rådgivande lås?

Rådgivande lås är lås vars betydelse helt och hållet definieras av applikationen. PostgreSQL kopplar dem inte till någon rad eller tabell – det är koden som avgör vad en viss låsnyckel representerar.

Varför använda dem?

De passar perfekt för samordning som inte kan kopplas till en enskild rad:

  • Säkerställa att endast en worker kör ett nattligt jobb
  • Serialisera åtkomst till ett externt API
  • Förhindra att två processer importerar samma fil

Låsnycklar

Ett rådgivande lås identifieras av ett 64-bitars heltal eller av två 32-bitars heltal. Du väljer talen; ett vanligt mönster är att hasha en sträng till en heltalsnyckel.

SELECT hashtext('nightly-report');

Lås på sessionsnivå

pg_advisory_lock behåller låset tills du frigör det eller sessionen avslutas. Funktionen blockerar om en annan session redan har samma nyckel.

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

Försök låsa utan att blockera

Ofta vill du inte behöva vänta. pg_try_advisory_lock returnerar true om låset kunde tas och returnerar false omedelbart om någon annan redan håller det.

SELECT pg_try_advisory_lock(42);

Mönstret med en enda worker

Ett cron-utlöst jobb använder ett låsförsök för att säkerställa att endast en instans körs. Om resultatet är false avslutas den här instansen helt enkelt.

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

Lås på transaktionsnivå

Varianterna med _xact_ frigörs automatiskt vid COMMIT eller ROLLBACK, så du kan inte glömma att låsa upp. De passar utmärkt för korta kritiska sektioner.

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

Inspektera aktiva lås

Rådgivande lås visas i pg_locks med locktype 'advisory'. Använd vyn för att felsöka vem som håller vilket lås.

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

Rådgivande lås kontra radlås

Viktiga skillnader jämfört med SELECT ... FOR UPDATE:

  • Rådgivande lås är inte kopplade till någon rad
  • De finns kvar mellan satser utan att hålla kvar radversioner
  • Deras betydelse bygger enbart på en konvention som applikationen följer

Fallgropar att undvika

Se upp med:

  • Att glömma låsa upp lås på sessionsnivå (föredra xact-varianter)
  • Nyckelkollisioner mellan orelaterade funktioner – använd separata namnrymder för nycklarna
  • Connection poolers som återanvänder sessioner och läcker lås

Lås upp sessionslås på ett säkert sätt

Lås på sessionsnivå kan tas flera gånger och måste låsas upp lika många gånger. Om du vill frigöra allt som den aktuella sessionen håller samtidigt använder du hjälpfunktionen för att låsa upp alla lås.

SELECT pg_advisory_unlock_all();

Snabbtest

Testa dina kunskaper om rådgivande lås.

Sammanfattning

Du har lärt dig om rådgivande lås:

  • Applikationsdefinierade lås som inte är kopplade till rader eller tabeller
  • Identifieras av 64-bitarsnycklar eller par av 32-bitarsnycklar
  • Varianter på sessionsnivå respektive transaktionsnivå som frigörs automatiskt
  • pg_try_advisory_lock möjliggör mönster med en enda worker
  • Använd separata namnrymder för nycklar och föredra xact-lås för att undvika läckor
Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
22
Lektioner
88

Vanliga frågor

Är lektionen ”Advisory locks för samordning i applikationer” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Prestandaoptimering och frågeoptimering i PostgreSQL, inklusive ”Advisory locks för samordning i applikationer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Prestandaoptimering och frågeoptimering i PostgreSQL innehåller totalt 4 lektioner.

Vad lär jag mig i ”Advisory locks för samordning i applikationer”?

Lär Er hur PostgreSQL:s advisory locks ger applikationen en lättviktig, programmerarstyrd mutex för att samordna jobb och skydda kritiska sektioner utan att låsa tabellrader. Ni övar på Prestandaoptimering och frågeoptimering i PostgreSQL med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Prestandaoptimering och frågeoptimering i PostgreSQL?

Du behöver inga förkunskaper. Utbildningen i Prestandaoptimering och frågeoptimering i PostgreSQL på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Advisory locks för samordning i applikationer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Prestandaoptimering och frågeoptimering i PostgreSQL-lektionen?

Ja. Varje Prestandaoptimering och frågeoptimering i PostgreSQL-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Förstå lås och deadlocks
  2. Identifiera och lösa låskonkurrens
  3. Strategier för låsning på radnivå
  4. Advisory locks för samordning i applikationer
← Tillbaka till Prestandaoptimering och frågeoptimering i PostgreSQL