Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 28055|Răspunde: 3

[Sursă] Controlul concurenței multi-versiune SQL Server

[Copiază linkul]
Postat pe 28.01.2021 17:55:52 | | |
Consistența bazei de date este, de asemenea, unul dintre indicatorii importanți pentru măsurarea performanței DBMS. În prezent, majoritatea bazelor de date comerciale (DB2, SQL Server) folosesc protocolul Two-Phase Locking (2PL) pentru controlul concurenței, care asigură serializarea execuției concurente a tranzacțiilor. Totuși, 2PL trebuie să blocheze orice date înainte să poată citi sau scrie pe ele. În matricea de compatibilitate blocantă, blocările S (blocaje de partaj) și X (blocaje exclusive) sunt incompatibile, astfel încât atunci când tranzacția 1 efectuează o operație de citire asupra datelor A (plus un blocaj S), iar tranzacția 2 dorește să scrie în date (adaugă un blocaj X), atunci tranzacția 2 trebuie să aștepte ca tranzacția 1 să elibereze blocajul S pe datele A înainte de a continua. Controlul concurenței multi-versiune (MVCC) rezolvă bine această problemă. Într-un sistem cu mai multe versiuni, fiecare date de scriere generează o versiune nouă, iar operația de citire poate citi versiunea corespunzătoare după necesitate, astfel încât operațiile de citire și scriere să nu se blocheze reciproc. MVCC crește concurența, dar introduce și costul de stocare al menținerii mai multor versiuni.

Motorul de baze de date Microsoft SQL Server introduce o nouă implementare a nivelului existent de izolare a tranzacțiilor - citiri confirmate, care oferă instantanee la nivel de instrucțiuni folosind versionarea rândurilor. Motorul de baze de date SQL Server introduce, de asemenea, un nou nivel de izolare a tranzacțiilor – snapshot-uri pentru a oferi snapshot-uri la nivel de tranzacție care folosesc și versiunarea rândurilor.

Setarea opțiunii READ_COMMITTED_SNAPSHOT baza de date pe ON permite izolarea citirii angajate folosind versiunarea rândurilor. Setarea opțiunii ALLOW_SNAPSHOT_ISOLATION baza de date pe ON permite izolarea instantaneelor. Când oricare dintre opțiuni este activată pentru baza de date, motorul bazei de date menține versiunea fiecărui rând modificată. Ori de câte ori o tranzacție modifică un rând, imaginea șirului anterior modificării este copiată pe o pagină din magazinul de versiuni. Un magazin de versiuni este o colecție de pagini de date în tempdb. Dacă există mai multe linii de modificare a tranzacțiilor, mai multe versiuni ale acelei linii vor fi legate într-un lanț de versiuni. O operație de citire folosind versiunarea rândurilor va recupera ultima versiune a fiecărui rând care a fost confirmată la începutul tranzacției sau instrucțiunii.

Aplicațiile scrise pentru SQL Server 2008 sau cele noi în SQL Server implementează izolarea commit-urilor de citire folosind versiunarea pe rând, specificând nivelul de izolare al tranzacțiilor pentru commit-urile de citire atunci când opțiunea READ_COMMITTED_SNAPSHOT bază de date este ACTIVATĂ. Toate lecturile vor analiza versiunea de rând care a fost confirmată când a început declarația. Aceasta va oferi o imagine de ansamblu la nivel de instrucțiuni a datelor.

Aplicațiile scrise pentru SQL Server vor implementa izolarea instantaneelor prin specificarea nivelului de izolare a tranzacțiilor instantanee atunci când opțiunea ALLOW_SNAPSHOT_ISOLATION bază de date este ACTIVATĂ. Toate citirile dintr-o tranzacție instantanee vor analiza versiunea rândului care a fost confirmată la începutul tranzacției. Aceasta va oferi o imagine de ansamblu la nivel de tranzacție a datelor.

Pentru tranzacțiile care folosesc niveluri de izolare bazate pe rânduri, citirile nu solicită blocaje partajate pe date. Aceasta înseamnă că cititorii care folosesc versionarea rândurilor nu împiedică alți cititori sau scriitori să acceseze aceleași date. În mod similar, scriitorul nu se pune în calea cititorului. Totuși, scriitorii se încurcă reciproc (chiar și atunci când rulează la un nivel de izolare bazat pe versiunea de rând). Două operații de scriere nu pot modifica aceleași date în același timp.

Funcția Snapshot Isolation extinde cadrul de blocare din SQL Server 2008, permițând aplicațiilor să vizualizeze valorile înainte ca orice modificare a datelor să aibă loc. Acest lucru previne blocarea aplicației, oferind în același timp date efectiv trimise. Snapshot-ul Read Committed din SQL Server 2008 necesită activarea unui administrator de baze de date, permițând citirea datelor prin tranzacții doar în citire. Așadar, controlul concurenței de către SI pentru tranzacțiile doar în citire este foarte bun, dar nu este clar dacă acest lucru este valabil pentru tranzacțiile de actualizare. Este mai nefavorabil ca tranzacțiile de actualizare pe termen lung să concureze cu tranzacțiile de nivel înalt pe termen scurt. Dacă o tranzacție între baze de date încearcă să folosească standardul Snapshot Isolation (SI), în loc de toate bazele de date setate, tranzacția eșuează. Acest lucru creează, fără îndoială, anumite obstacole în calea scalabilității. Se pare că Microsoft mai are încă un drum lung de parcurs pentru a-și atinge propriul SI, mai puternic decât specificația SQL 92.

Înainte de orice modificare, faceți o copie a versiunii anterioare, iar toate operațiunile ulterioare de citire vor citi versiunea copiată, iar modificarea va crea o versiune nouă. Astfel,Operațiile de citire și scriere nu se blochează reciproc. Avantajul utilizării acestui mecanism de versionare a liniilor este că concurența programului este relativ mare, dar dezavantajul este că, deși utilizatorul nu citește o dată murdară, aceasta poate fi o valoare a datei care este modificată și este pe cale să expire. Dacă modifici datele pe baza acestei valori expirate, va apărea o eroare logică

Comenzi SQL:


Linkuri de referință:

Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.





Precedent:Elasticsearch (ES) replică indicele clonă
Următor:Tutorial CUBASE10.5
Postat pe 29.01.2021 09:13:40 |
xuexi
Postat pe 15.07.2021 20:37:16 |
O vreau, o vreau, o vreau, o vreaudori
Postat pe 12.12.2021 01:22:12 |
O vreau, o vreau, o vreau
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com