Sunteți pe pagina 1din 23

BAZE DE

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

• Principalele tipuri de tranzactii:


 Tranzacții de preluare (Retrieval transactions)
 Tranzacții de actualizare (Update transactions)
 Tranzacții mixte (Mixed transactions)
Baze de date

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

• Următoarele instrucțiuni T-SQL controlează tranzacțiile în SQL Server:


 BEGIN TRANSACTION
 COMMIT TRANSACTION
 ROLLBACK TRANSACTION
 SET TRANSACTION
 SAVEPOINT

                                  
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

• Resurse care pot să aibă mecanisme de blocare:


 RID (Row ID)
 Table
 Key
 Page
 Extent
 Database
Baze de date

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)

 Update (U) - folosit pentru resurse care pot fi actualizate 

 Exclusive (X) - folosit pentru operațiuni de modificare a datelor (INSERT, UPDATE sau DELETE) 

 Intent - folosit pentru a stabili o ierarhie de blocare   


• intent shared (IS)
• intent exclusive (IX)
• intent update (IU)
• shared with intent exclusive (SIX)
• shared intent update (SIU)
• update intent exclusive (UIX)
Baze de date

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

Mecanisme de blocare (Locks) - Dead lock

                                  
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

Mecanisme de blocare (Locks) - Dead lock


• Un blocaj apare atunci când două procese concurează pentru accesul exclusiv la o resursă, dar nu pot obține acces exclusiv
la aceasta, deoarece celălalt proces îl împiedică

Tipuri de blocaje
• Cycle locks deadlock
• Conversion locks deadlock 

Cum gestionează SQL Server blocajele


• Funcționează la fiecare 5 secunde în mod implicit
• Când detectează un blocaj, acest interval scade de la 5 secunde la 100 de milisecunde, în funcție de frecvența apariției
blocajului
• Când în sfârșit nu găsește niciun blocaj, a pus intervalul la valoarea implicită de 5 secunde
• Odată ce victima este aleasă, aceasta va anula tranzacția acestei victime și va returna utilizatorului un mesaj de eroare 
                                  

                 
Baze de date

Mecanisme de blocare (Locks) - Dead lock


Cum alege SQL Server victima?
SET DEADLOCK_PRIORITY
• LOW ( -5 )
- dacă alte tranzacții au o prioritate NORMAL sau HIGH sau numeric mai mare decât -5, această tranzacție va fi aleasă ca
victimă a blocajului

• 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

Niveluri de izolare în SQL Server (Isolation levels)


• Utilizate pentru a defini gradul în care o tranzacție trebuie izolată de modificările pe resurse /date făcute de alte tranzacții
concurente

• Nivelurile de izolare a tranzacțiilor controlează următoarele efecte:


- dacă sunt puse locks atunci când sunt citite datele și ce tip de lock este solicitat
- cât timp sunt ținute read locks
- dacă se fac operațiuni de citire care fac referire la rânduri modificate de o altă tranzacție

• 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

Niveluri de izolare în SQL Server (Isolation levels)


• Read Uncommitted - cel mai scăzut nivel de izolare, poate prelua date care au fost modificate, dar nu au fost comise de alte
tranzacții

• 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

Niveluri de izolare în SQL Server (Isolation levels) - Violations 


 Dirty read 
• apare atunci când o tranzacție poate citi date care au fost actualizate într-o altă tranzacție, dar care nu au fost încă comise

 Non repeatable read


• Se întâmplă atunci când datele sunt citite de două ori în cadrul aceleiași tranzacții și nu poate fi garantat că vor conține
aceeași valoare

 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

Niveluri de izolare în SQL Server (Isolation levels) - Violations 

                                  
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

Read Committed nu apar pot apărea pot apărea pot apărea

Repeatable Read nu apar nu apar nu apar pot apărea

Serializable nu apar nu apar nu apar nu apar


Baze de date

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/

S-ar putea să vă placă și