Documente Academic
Documente Profesional
Documente Cultură
DATE
Lecția 7
Concurență (concurrency) și performanță
Tranzacții
BAZE DE DATE
• Tranzacții
• Modurile de operare ale tranzacțiilor
• Mecanisme de blocare (locks)
• Diferența dintre nivelurile de izolare
• Evenimente extinse
• Statistici de interogare
• Teme și exerciții
Baze de date
Tranzacții (Transactions)
• O tranzacție este o combinație dintre mai multe interogări sau comenzi SQL grupate și executate împreună
• De exemplu, dacă creați, actualizați sau ștergeți o înregistrare din tabel, atunci efectuați o tranzacție pe acel tabel
• Tranzacțiile reprezintă evenimente din lumea reală, cum ar fi tranzacții bancare, rezervări pentru companii aeriene,
remiterea de fonduri și așa mai departe
Tranzacții (Transactions)
• Starea unei tranzacții
Baze de date
Tranzacții (Transactions)
• Când folosim tranzacții:
în procesarea unui lot (batch), în care mai multe rânduri trebuie să fie inserate, actualizate sau șterse ca o singură unitate
Ori de câte ori o modificare a unui tabel necesită ca celelalte tabele să fie menținute consecvente
La modificarea datelor din două sau mai multe baze de date simultan
În tranzacțiile distribuite, unde datele sunt manipulate în baze de date de pe diverse servere
Baze de date
Tranzacții (Transactions)
• SQL Server operează în următoarele moduri de tranzacție:
Ø Autocommit transactions
Ø Explicit transactions
Ø Implicit transactions
Local transactions
Ø Batch-scoped transactions
Distributed Transactions
- tranzacțiile distribuite se întind pe două sau mai multe servere, cunoscute sub numele de manageri de resurse
- o tranzacție cu un singur server SQL care se întinde pe două sau mai multe baze de date este de fapt o tranzacție distribuită
Baze de date
Tranzacții (Transactions)
Distributed Transactions
DB2
Baze de date
Tranzacții (Transactions)
• Proprietățile ACID
Atomicity (Atomicitate) - Toate operațiunile incluse în tranzacție au fost efectuate cu succes, în caz contrar, toate
operațiunile sunt anulate în momentul eșecului și toate operațiunile anterioare sunt anulate (rolled back)
Consistency (Consecvență) - Această proprietate asigură că toate datele vor fi consecvente după ce o tranzacție este
finalizată în conformitate cu regulile, constrângerile și declanșatoarele definite
Isolation (Izolare) - Fiecare tranzacție are o graniță bine definită, adică este izolată față de o altă tranzacție
Durability (Durabilitate) - Modificările datelor care apar în cadrul unei tranzacții executate cu succes sunt păstrate
permanent în sistem, indiferent de ce altceva se întâmplă
Baze de date
Mecanisme de blocare (Locks)
• Blocarea este un mecanism utilizat de SQL Server Database Engine pentru a sincroniza accesul mai multor utilizatori la
aceeași bucată de date în același timp (concurrency)
• Blocarea asigură integritatea datelor și consecvența acestora
• Aplicațiile de obicei nu solicită direct Locks, aceștia sunt gestionați intern de o parte a Database Engine numită lock
manager (manager de blocare)
• În esență, Locks sunt structuri in-memory care au proprietari, tipuri și hash-ul resursei pe care ar trebui să o protejeze
Mecanisme de blocare (Locks)
• Escaladarea blocării (Lock escalation) - pentru a preveni o situație în care blocarea utilizează prea multe resurse
1,875 pages 30,000 rows
500 bytes for each row
Baze de date
Mecanisme de blocare (Locks)
Modurile de blocare (Locks modes)
Shared (S) - folosit pentru operațiuni de citire care nu modifică sau actualizează datele (SELECT)
Exclusive (X) - folosit pentru operațiuni de modificare a datelor (INSERT, UPDATE sau DELETE)
Mecanisme de blocare (Locks)
Modurile de blocare (Locks modes)
Ø Schema - folosit când se execută o operație dependentă de schema unui tabel
• schema modification (Sch-M)
• schema stability (Sch-S)
Ø Bulk Update (BU) - folosit atunci când utilizatorul dorește să insereze o cantitate mare de date într-un tabel
Ø Key-Range - protejează o serie de rânduri incluse implicit într-un set de înregistrări citite de o instrucțiune Transact-SQL în
timp ce se utilizează nivelul de izolare a tranzacției serializabil, previne citirile fantomă
Baze de date
Mecanisme de blocare (Locks)
Ierarhia de blocare
• SQL Server a introdus ierarhia de blocare care se aplică atunci când se efectuează citirea sau modificarea datelor
Baze de date
Mecanisme de blocare (Locks)
Compatibilitate
Baze de date
Table A
OP1
OP4
Update Table A
Update Table A
Transaction Transaction
1 2
OP3
OP2
Update Table B
Update Table B
Table B
Baze de date
Tipuri de blocaje
• Cycle locks deadlock
• Conversion locks deadlock
Baze de date
• NORMAL( 0 )
- aceasta este prioritatea implicită
- tranzacția ar putea fi aleasă ca victimă dacă alte tranzacții au o prioritate mai mare de 0
• HIGH ( 5 )
- acest proces nu va fi selectat ca victimă decât dacă există un proces cu o prioritate numerică mai mare de 5
Baze de date
• O tranzacție primește întotdeauna un exclusive lock asupra datelor pe care le modifică, aceasta deține acel lock până la
finalizarea tranzacției, indiferent de nivelul de izolare setat pentru tranzacția respectivă
• Pentru operațiunile de citire, nivelurile de izolare a tranzacțiilor definesc în principal modul în care operațiunea este
protejată de efectele altor tranzacții
Baze de date
• Read Committed (default) - specifică faptul că instrucțiunile nu pot citi date care au fost modificate, dar care nu au fost
comise de alte tranzacții,astfel previne dirty reads
• Repeatable Read - specifică faptul că instrucțiunile nu pot citi date care au fost modificate, dar care nu au fost încă comise
de alte tranzacții și că nicio altă tranzacție nu poate modifica datele care au fost citite de tranzacția curentă până la
finalizarea tranzacției curente
• Snapshot - specifică faptul că datele citite de orice declarație dintr-o tranzacție vor fi versiunea consecventă din punct de
vedere tranzacțional a datelor care existau la începutul tranzacției
• Serializable - cel mai înalt nivel de izolare, garantează că o tranzacție va prelua exact aceleași date de fiecare dată când
repetă o operație de citire
Baze de date
Phantom read
• apare atunci când, în cursul unei tranzacții, noi rânduri sunt adăugate sau eliminate de o altă tranzacție la înregistrările citite
Lost update
• apare atunci când 2 tranzacții simultane încearcă să citească și să actualizeze aceleași date
• o actualizare efectuată asupra unei date printr-o tranzacție se pierde deoarece este supra-scrisă de actualizarea efectuată de
o altă tranzacție
Baze de date
Read phenomena
Dirty reads Lost updates Non-repeatable reads Phantoms
Isolation level
Read Uncommitted pot apărea pot apărea pot apărea pot apărea
Temă
• Creați două tranzacții pe o bază de date la alegere
• Folosiți diferitele niveluri de isolare când executați tranzacțiile
• Încercați să creați un deadlock între două tranzacții și să creați un eveniment pentru documentarea datelor despre deadlocks
Baze de date
Extra reading
Transactions
https://www.tutorialspoint.com/sql/sql-transactions.htm
https://redmondmag.com/articles/2014/02/27/sql-server-distributed-transactions.aspx#:~:text=A%20distributed%20transaction
%20is%20just,exist%20across%20multiple%20different%20servers.&text=We%20normally%20think%20of%20distributed,o
f%20a%20SQL%20Server%20transaction
.
Locks
https://www.javatpoint.com/locks-in-sql-server
https://sqlservergeeks.com/locking-hints-sql-server/
https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-s
erver-ver15
Isolation levels
https://www.geeksforgeeks.org/concurrency-problems-in-dbms-transactions/