Blocare în două faze

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Blocarea în două faze (2PL), blocarea în două faze , în limba italiană , este un protocol pentru controlul concurenței utilizat în domeniul bazelor de date de procesare și de tranzacție pentru a asigura serializabilitate unui program de tranzacție. Acest protocol se bazează pe blocări, aplicabile de la o tranzacție la un element de date (la diferite niveluri de granularitate: atribut, tuplu, relație, bază de date), care blochează accesul altor tranzacții la date până la tranzacția care reține.

Acest protocol presupune că fiecare tranzacție care rulează are două faze principale:

  • fază ascendentă: sunt solicitate toate blocările resurselor necesare pentru executarea întregii tranzacții, nu este posibilă eliberarea blocărilor în această fază;
  • faza descendentă: blocările sunt eliberate fără posibilitatea de a achiziționa altele noi până la sfârșitul tranzacției.

Există două tipuri de blocări utilizate de protocolul de bază: exclusiv (binar) și partajat (multiplu). Protocoalele ulterioare cu cel de bază pot utiliza mai multe tipuri de blocări. Utilizarea unor variante de 2PL aduce cu sine problema impasului care rezultă din așteptarea circulară care poate apărea între tranzacții și date blocate cu blocări.

Blocare pentru acces la date

O blocare este un obiect de sistem asociat cu o resursă partajată, cum ar fi un tuplu sau o relație de bază de date. În bazele de date, achiziționarea unui blocaj pentru accesarea datelor poate fi necesară pentru ca o tranzacție să citească / scrie datele. Utilizarea corectă a acestui instrument previne executarea tranzacțiilor care efectuează operațiuni conflictuale și care ar aduce baza de date într-o stare inconsistentă.

Cele două tipuri principale de încuietori utilizate sunt:

  • blocare de scriere (blocare exclusivă), obținută printr-o tranzacție pentru anumite date pentru a putea efectua o operațiune de scriere (adică inserare, modificare, anulare);
  • citire blocare (blocare partajată), dobândită de o tranzacție pentru anumite date pentru a putea efectua o operație de citire.

Solicitările de blocare sunt trimise de tranzacții către managerul de concurență care, pe baza stării resursei în cauză, evaluează dacă se acordă blocarea sau se așteaptă tranzacția. Această alegere se face consultând următorul tabel:

Liber R-blocare Blocare W
R-blocare Da / R-blocare Da / R-blocare Blocare nu / W
Blocare W Da / W-lock Nu / blocare R Blocare nu / W
Deblocați Nu / Gratuit Da / Depinde S-a eliberat

Acest tabel prezintă în prima coloană posibilele solicitări ale tranzacțiilor, în primul rând stările posibile ale unei resurse și în interiorul casetelor dacă cererea a fost acceptată de managerul concurenței și starea ulterioară respectivă a resursei. [1]

În cazul în care resursa se află în starea R-lock și tranzacția necesită o deblocare sau pentru a debloca resursa, aceasta din urmă devine gratuită numai dacă nu existau alte R-locks care să o mențină blocată, de fapt starea R -blocarea este partajată, astfel încât mai multe tranzacții o pot solicita și resursa devine efectiv gratuită numai atunci când toate resursele care au blocat-o în citire o eliberează. Din acest motiv, de obicei folosim un contor care ține evidența numărului de tranzacții care se află în citire-blocare pe o resursă, care este incrementată după fiecare blocare R și decrementată după fiecare deblocare . Resursa devine de fapt gratuită numai atunci când acel contor este zero.

2PL strict

Versiunea standard a blocării în două faze nu reușește să prevină conflictul de citire murdară, adică faptul că o dată poate fi modificată printr-o tranzacție , citit în versiunea sa modificată de o tranzacție și restabilit la versiunea sa originală în caz efectua un avort . Blocarea strictă în două faze (strict 2PL) este o versiune în două faze a blocării care previne acest tip de anomalie, asigurându-se că toate deblocările resurselor sunt efectuate numai după orice comitere sau întrerupere a tranzacției; în acest fel, dacă o tranzacție se află în blocare W pe o anumită resursă și se întrerupe, revine la toate modificările înainte de a elibera blocarea. Această versiune a 2PL este cea mai larg adoptată în SGBD comercial [1] .

Exemplu de tranzacții concurente cu 2PL

Iată două tranzacții care respectă 2PL, dar nu și 2PL strict:

blocare (p1)
citit (p1)
blocare (p1)
scrie (p1)
blocare (p2)
debloca (p1)
citit (p1)
scrie (p1)
blocare (p2)
debloca (p1)
citit (p2)
scrie (p2)
debloca (p2)
citit (p2)
scrie (p2)
debloca (p2)

După cum se poate vedea din tabel, atât în ​​T1, cât și în T2, încuietorile și deblocările sunt achiziționate și eliberate conform 2PL, dar nu conform 2PL stricte; tranzactia de fapt, efectuează o deblocare a resursei p1 înainte de a comite, după eliberarea p1 efectuează acțiunile de citire și scriere pe p2.

Notă

  1. ^ a b "Paolo Atzeni", "Stefano Ceri", "Stefano Paraboschi" și "Riccardo Torlone", "Controlul concurenței" , în "Baze de date: concepte, limbaje și arhitectură" , "", "McGraw-Hill", „1999”.

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT