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.

  • 🔁 Unitate centrală: O tranzacție grupează operațiunile de citire și scriere corelate, astfel încât acestea să reușească sau să eșueze împreună, niciodată pe jumătate.
  • 🧪 Proprietăți acidului: AtomIcitatea, consistența, izolarea și durabilitatea garantează rezultate corecte chiar și în caz de eșec sau concurență.
  • 🚦 Stări de tranzacție: Activă, parțial finalizată, finalizată, eșuată și terminată descriu ciclul de viață al unei tranzacții.
  • 👥 De ce concurență: O bază de date este partajată, deci mai multe tranzacții rulează simultan și nu trebuie să corupă datele reciproce.
  • 📋 orarele: Un program ordonează operațiunile tranzacțiilor paralele, păstrând în același timp secvența internă a fiecărei tranzacții.
  • 🔗 Serializabilitate: Un program concurent este corect atunci când rezultatul său este egal cu o execuție serială, judecată prin conflict sau echivalență de vizualizări.
  • ↩️ Recuperare: O tranzacție eșuată este anulată, astfel încât scrierile sale parțiale să nu ajungă niciodată în baza de date validată.

Managementul tranzacțiilor în SGBD-uri

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.

Tranzacția bazei de date se deplasează între stări consistente
Tranzacție cu baze de date

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ă.

Diagrama tranziției de stare pentru o tranzacție în baza de date

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.

  1. Odată ce o tranzacție începe execuția, aceasta devine activă. Poate efectua o operațiune de READ sau WRITE.
  2. Odată ce operațiunile de READ și WRITE sunt finalizate, tranzacția ajunge în starea de validare parțială.
  3. Î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.
  4. Dacă verificarea eșuează, tranzacția trece în starea eșuată.
  5. 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.
  6. 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.

Întrebări frecvente

Funcția „commit” face ca modificările unei tranzacții să fie permanente în baza de date. Funcția „rollback” anulează fiecare modificare de la începutul tranzacției, readucând baza de date la starea consistentă care exista înainte de începerea acesteia.

Atomicity. Dacă are loc o eroare în timpul procesului, atomicitatea asigură că lucrarea parțială este eliminată, astfel încât tranzacția este tratată ca și cum nu ar fi rulat niciodată. Durabilitatea protejează apoi lucrarea validată după recuperare.

IA analizează așteptările de blocare și graficele de blocaje intermediare pentru a identifica tranzacțiile care blochează altele, apoi recomandă un nivel de izolare sau o modificare a indexului care reduce conflictul fără a slăbi corectitudinea.

Într-o oarecare măsură. Prin învățarea tiparelor de solicitare a blocării care au precedat blocajele anterioare, un model poate semnala din timp un mix de tranzacții riscante, permițând planificatorului să amâne sau să reordoneze înainte de formarea unui ciclu.

Un program serial execută o tranzacție complet înainte de începerea următoarei, deci nicio intercalare nu poate corupe datele. Este lent, motiv pentru care obiectivul este un program concurent serializabil cu acesta.

Rezumați această postare cu: