Gestionarea tranzacțiilor în SGBD: Stări, tipuri și ACID
⚡ Rezumat inteligent
Gestionarea tranzacțiilor în baza de date tratează una sau mai multe operațiuni ale bazei de date ca o singură unitate logică ce mută baza de date dintr-o stare consistentă în alta. Se bazează pe proprietăți ACID, stări de tranzacție definite și programări pentru a menține accesul concurent corect.

Ce este o tranzacție cu baze de date?
A Tranzacție cu baze de date este o unitate logică de procesare într-un SGBD care implică una sau mai multe operațiuni de acces la baza de date. Pe scurt, tranzacțiile bazei de date reprezintă evenimente din lumea reală a oricărei întreprinderi.
Toate tipurile de operațiuni de acces la baza de date care au loc între instrucțiunile de început și de sfârșit ale tranzacției sunt considerate o singură tranzacție logică în SGBD. În timpul tranzacției, baza de date este inconsistentă. Numai după ce tranzacția este validată, starea se schimbă dintr-o stare consistentă în alta.

Informații despre tranzacțiile bazei de date
- O tranzacție este o unitate de program a cărei execuție poate sau nu modifica conținutul unei baze de date.
- Conceptul de tranzacție în DBMS este executat ca o singură unitate.
- Dacă operațiunile bazei de date nu actualizează baza de date, ci doar preiau date, acest tip de tranzacție se numește tranzacție numai în citire.
- O tranzacție reușită poate schimba baza de date dintr-o STARE CONSISTENȚĂ în alta.
- Tranzacțiile DBMS trebuie să fie atomice, consistente, izolate și durabile.
- Dacă baza de date ar fi într-o stare inconsistentă înainte de tranzacție, aceasta ar rămâne în starea inconsecventă după tranzacție.
De ce ai nevoie de concurență în tranzacții?
O bază de date este o resursă partajată. Este utilizată simultan de mai mulți utilizatori și procese. Exemplele includ sistemele bancare, sistemele de rezervări feroviare și aeriene, monitorizarea pieței bursiere și inventarul și casele de marcat din supermarketuri.
Negestionarea accesului concurent poate crea probleme precum:
- Defecțiuni hardware și blocaje de sistem.
- Executarea concomitentă a aceleiași tranzacții, impassau performanță lentă.
Controlul acestui acces partajat este sarcina controlul concurentei, care folosește blocări și marcaje temporale pentru a intercala tranzacțiile în siguranță. Înainte de asta, este util să cunoaștem stările prin care trece o tranzacție.
State ale Tranzacțiilor
Diferitele stări ale unui concept de tranzacție în DBMS sunt enumerate mai jos:
| Stat | Descriere |
|---|---|
| Stare activă | O tranzacție intră în starea activă atunci când începe procesul de execuție. În timpul acestei stări, se pot efectua operațiuni de citire sau scriere. |
| Parțial angajat | O tranzacție intră în starea parțial confirmată după încheierea tranzacției. |
| Stat comis | Când tranzacția atinge starea de validare, execuția sa s-a finalizat cu succes, iar toate modificările sale sunt înregistrate permanent în baza de date. |
| Stat eșuat | O tranzacție este considerată eșuată atunci când oricare dintre verificări eșuează sau dacă tranzacția este abandonată în timp ce se află în starea activă. |
| Stat terminat | Starea unei tranzacții atinge starea terminată atunci când tranzacția părăsește sistemul și nu poate fi repornită. |
Să studiem o diagrama de tranziție a stărilor care evidențiază modul în care o tranzacție se mișcă între aceste diferite state.
- Odată ce o tranzacție începe execuția, aceasta devine activă. Poate efectua o operațiune de READ sau WRITE.
- Odată ce operațiunile de READ și WRITE sunt finalizate, tranzacția ajunge în starea de validare parțială.
- În continuare, unele protocoale de recuperare trebuie să garanteze că o eroare de sistem nu va duce la incapacitatea de a înregistra permanent modificările tranzacției. Dacă această verificare are succes, tranzacția se confirmă și intră în starea de confirmare.
- Dacă verificarea eșuează, tranzacția trece în starea eșuată.
- Dacă tranzacția este abandonată în timp ce se află în starea activă, aceasta trece în starea eșuată. Tranzacția trebuie anulată pentru a anula efectul operațiunilor sale de scriere asupra bazei de date.
- Starea încheiată se referă la tranzacția care părăsește sistemul.
Care sunt proprietățile acidului?
Proprietățile ACIDE sunt utilizate pentru menținerea integrității bazei de date în timpul procesării tranzacțiilor. ACID în DBMS înseamnă Atomicitate, Cpersistenta, Isolare, și Durabilitate.
- Atomicity: O tranzacție este o singură unitate de operare. Fie îl executați în întregime, fie nu îl executați deloc. Nu poate exista execuție parțială.
- Coerența: Odată ce tranzacția este executată, aceasta ar trebui să treacă de la o stare consistentă la alta.
- Izolare: O tranzacție ar trebui executată separat de alte tranzacții. În timpul execuției concurente, rezultatele intermediare ale tranzacțiilor executate simultan nu ar trebui să fie puse la dispoziția celorlalte.
- Durabilitate: După finalizarea cu succes a unei tranzacții, modificările din baza de date ar trebui să persiste, chiar și în cazul unor erori de sistem.
Proprietatea ACID în SGBD cu exemplu
Mai jos este un exemplu al proprietății ACID într-un SGBD:
Transaction 1: Begin X=X+50, Y = Y-50 END Transaction 2: Begin X=1.1*X, Y=1.1*Y END
Tranzacția 1 transferă 50 USD din contul X în contul Y.
Tranzacția 2 creditează fiecare cont cu o dobândă de 10%.
Dacă ambele tranzacții sunt trimise împreună, nu există nicio garanție că Tranzacția 1 se va executa înaintea Tranzacției 2 sau invers. Indiferent de ordine, rezultatul trebuie să fie ca și cum tranzacțiile ar avea loc în serie, una după alta.
Tipuri de tranzacții
Pe baza domeniilor de aplicare:
- Nedistribuit vs. distribuit.
- Tranzacții compensatorii.
- Momentul tranzacției.
- Online vs. lot.
Pe baza acțiunilor:
- În doi pași.
- Restricţionat.
- Modelul de acțiune.
Pe baza structurii:
- Tranzacții simple sau plate: constau dintr-o secvență de operații primitive executate între o operație de început și una de sfârșit.
- Tranzacții imbricate: o tranzacție care conține alte tranzacții.
- Fluxul de lucru.
Ce este un orar?
O planificare este un proces de creare a unui singur grup de tranzacții paralele multiple și executarea lor una câte una. Ar trebui să păstreze ordinea în care apar instrucțiunile în fiecare tranzacție. Dacă două tranzacții sunt executate în același timp, rezultatul uneia dintre tranzacții poate afecta rezultatul celeilalte.
Exemplu
Initial Product Quantity is 10 Transaction 1: Update Product Quantity to 50 Transaction 2: Read Product Quantity
Dacă Tranzacția 2 este executată înainte de Tranzacția 1, vor fi citite informații învechite despre cantitatea de produs. Prin urmare, sunt necesare programe.
Execuția paralelă într-o bază de date este inevitabilă. Însă execuția paralelă este permisă atunci când există o relație de echivalență între tranzacțiile care se execută simultan. Această echivalență este de trei tipuri.
Echivalența rezultatelor: Dacă două programe afișează același rezultat după execuție, acestea se numesc programe cu rezultate echivalente. Acestea pot oferi același rezultat pentru anumite valori și rezultate diferite pentru un alt set de valori. De exemplu, o tranzacție actualizează cantitatea produsului, în timp ce o alta actualizează detaliile clientului.
Vezi echivalența: Echivalența vizualizărilor apare atunci când tranzacțiile din ambele programări efectuează o acțiune similară. De exemplu, o tranzacție introduce detalii despre produs în tabelul de produse, în timp ce o altă tranzacție introduce detalii despre produs în tabelul de arhivă. Tranzacția este aceeași, dar tabelele sunt diferite.
Echivalența conflictului: În acest caz, două tranzacții actualizează sau vizualizează același set de date. Există un conflict între tranzacții, deoarece ordinea de execuție va afecta rezultatul.
Ce este serializarea?
Serializabilitatea este procesul de căutare a unui program concurent al cărui rezultat este egal cu un program serial în care tranzacțiile sunt executate una după alta. În funcție de tipul de program, există două tipuri de serializare:
- Serializabilitatea conflictelor.
- Vedeți serializabilitatea.
Cele două diferă prin cât de stricte judecă echivalența, așa cum este rezumat mai jos.
| Aspect | Serializabilitatea conflictelor | Vizualizabilitatea vizualizării |
|---|---|---|
| Bază | Ordinea operațiunilor conflictuale | Relații de citire și scriere finală |
| Testare | Graficul de precedență trebuie să fie aciclic | Vedeți echivalența cu un program serial |
| Stricteţe | Mai strict, un subset | Mai amplu, include scrieri orb |
| Costul verificării | Eficient | Calculativ dificil |
Fiecare program serializabil din punct de vedere al conflictelor este și serializabil din punct de vedere vizual, dar nu invers, motiv pentru care serializabilitatea conflictelor este testul practic pe care îl aplică un SGBD.

