PostgreSQL:n suorituskyky ja kyselyjen optimointi · Oppitunti

Neuvottelevat lukot sovellusten koordinointiin

Oppikaa, miten PostgreSQL:n neuvottelevat lukot tarjoavat sovellukselle kevyen, ohjelmoijan hallitseman mutexin töiden koordinointiin ja kriittisten osioiden suojaamiseen ilman taulurivien lukitsemista.

Oppitunti 4/413 vaihetta

Neuvottelevat lukot sovellusten koordinointiin on ilmainen PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PostgreSQL:n suorituskyky ja kyselyjen optimointi-kurssilla on yhteensä 4 oppituntia.

Mitä advisory lockit ovat

Advisory lockit ovat lukkoja, joiden merkityksen sovellus määrittelee kokonaan itse. PostgreSQL ei liitä niitä mihinkään riviin tai tauluun, vaan koodisi päättää, mitä tietty lukkoavain tarkoittaa.

Miksi niitä käytetään

Ne sopivat erinomaisesti koordinointiin, joka ei liity yhteen tiettyyn riviin:

  • Varmistamaan, että vain yksi worker suorittaa öisen työn
  • Hallitsemaan ulkoisen API:n käyttöä sarjallisesti
  • Estämään kahta prosessia tuomasta samaa tiedostoa

Lukkoavaimet

Advisory lock tunnistetaan 64-bittisellä kokonaisluvulla tai kahdella 32-bittisellä kokonaisluvulla. Valitset luvut itse; yleinen käytäntö on tiivistää merkkijono kokonaisluvuksi ja käyttää sitä avaimena.

SELECT hashtext('nightly-report');

Istuntotason lukot

pg_advisory_lock pitää lukon voimassa, kunnes vapautat sen tai istunto päättyy. Kutsu jää odottamaan, jos toisella istunnolla on jo sama avain hallussaan.

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

Lukon kokeileminen ilman odottamista

Usein et halua jäädä odottamaan. pg_try_advisory_lock palauttaa arvon true, jos lukon saaminen onnistui, ja arvon false välittömästi, jos joku muu pitää sitä hallussaan.

SELECT pg_try_advisory_lock(42);

Yhden workerin malli

cron-ajastettu työ käyttää try-lockia varmistaakseen, että vain yksi instanssi suoritetaan. Jos tulos on false, tämä instanssi lopettaa toimintansa.

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

Transaktiotason lukot

_xact_-muunnelmat vapauttavat lukon automaattisesti COMMIT- tai ROLLBACK-toiminnon yhteydessä, joten lukon vapauttamista ei voi unohtaa. Ne sopivat erinomaisesti lyhyisiin kriittisiin osioihin.

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

Hallussa olevien lukkojen tarkastelu

Advisory lockit näkyvät pg_locks-näkymässä locktype-arvolla 'advisory'. Sen avulla voit selvittää, kenellä mikäkin lukko on hallussa.

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

Advisory lockit ja rivitasoiset lukot

Keskeiset erot SELECT ... FOR UPDATE -rakenteeseen verrattuna:

  • Advisory lockit eivät liity mihinkään riviin
  • Ne säilyvät kyselyiden välillä ilman riviversioiden varaamista
  • Niiden merkitys perustuu kokonaan sovelluksesi sopimaan käytäntöön

Vältettävät ongelmat

Kiinnitä huomiota seuraaviin asioihin:

  • Istuntotason lukon vapauttamisen unohtaminen (suosi xact-muunnelmia)
  • Toisiinsa liittymättömien ominaisuuksien avainten törmäykset — käytä avaimille nimiavaruuksia
  • Yhteyspoolerien istuntojen uudelleenkäyttö ja lukkojen vuotaminen

Istuntolukkojen siisti vapauttaminen

Istuntotason lukot voidaan hankkia useita kertoja, ja ne on vapautettava yhtä monta kertaa. Voit vapauttaa kaikki nykyisen istunnon hallussa olevat lukot kerralla käyttämällä kaikkien lukkojen vapauttamiseen tarkoitettua apufunktiota.

SELECT pg_advisory_unlock_all();

Pikatesti

Testaa tietosi advisory lokeista.

Kertaus

Opit advisory lockit:

  • Sovelluksen määrittelemät lukot, jotka eivät liity riveihin tai tauluihin
  • Lukot tunnistetaan 64-bittisillä tai kahdesta 32-bittisestä luvusta muodostuvilla avaimilla
  • Istuntotason ja automaattisesti vapautuvat transaktiotason muunnelmat
  • pg_try_advisory_lock mahdollistaa yhden workerin mallit
  • Käytä avaimille nimiavaruuksia ja suosi xact-lukkoja vuotojen välttämiseksi
Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
22
Oppitunnit
88

Usein kysytyt kysymykset

Onko oppitunti ”Neuvottelevat lukot sovellusten koordinointiin” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppimispolun 3 oppituntia, myös oppitunnin “Neuvottelevat lukot sovellusten koordinointiin”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. PostgreSQL:n suorituskyky ja kyselyjen optimointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Neuvottelevat lukot sovellusten koordinointiin”?

Oppikaa, miten PostgreSQL:n neuvottelevat lukot tarjoavat sovellukselle kevyen, ohjelmoijan hallitseman mutexin töiden koordinointiin ja kriittisten osioiden suojaamiseen ilman taulurivien lukitsemis… Harjoittelet PostgreSQL:n suorituskyky ja kyselyjen optimointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PostgreSQL:n suorituskyky ja kyselyjen optimointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Neuvottelevat lukot sovellusten koordinointiin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppitunnilla?

Kyllä. Jokainen PostgreSQL:n suorituskyky ja kyselyjen optimointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Lukkojen ja umpikujien ymmärtäminen
  2. Lukituskilpailun tunnistaminen ja ratkaiseminen
  3. Rivitason lukituksen strategiat
  4. Neuvottelevat lukot sovellusten koordinointiin
← Takaisin: PostgreSQL:n suorituskyky ja kyselyjen optimointi