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: 19946|Răspunde: 3

[Sursă] Blocaje de baze de date NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Copiază linkul]
Postat pe 14.01.2021 15:23:14 | | | |
NOLOCK
Când această opțiune este selectată, SQL Server citește sau modifică datele fără niciun blocaj. În acest caz, utilizatorul poate citi date dintr-o Tranzacție Neangajată sau Anulare, cunoscută sub numele de "date murdare".

BLOCAT DE REZERVĂ
Când această opțiune este selectată, SQL Server menține această blocare partajată până la sfârșitul întregii tranzacții, fără a o elibera pe drum.

ACTUALIZARE
Când această opțiune este selectată, SQL Server folosește un blocaj modify în loc de un blocaj partajat la citirea datelor și menține acest blocaj până la sfârșitul întregii tranzacții sau comenzi. Această opțiune asigură că mai multe procese pot citi datele simultan, dar doar acel proces poate modifica datele.

TABLOCK
Când această opțiune este selectată, SQL Server va plasa un blocaj comun pe întregul tabel până la sfârșitul comenzii. Această opțiune asigură că alte procese pot doar citi, nu pot modifica datele.

PAGLOCK
Această opțiune este cea implicită, iar când este selectată, SQL Server folosește un blocat de pagină partajat.

TABLOCKX (Blocare exclusivă a tabelului)
Când această opțiune este selectată, SQL Server va plasa un blocat pe întregul tabel până la încheierea comenzii sau tranzacției. Acest lucru va împiedica alte procese să citească sau să modifice datele din tabel.

HOLDLOCK menține blocajul partajat până la finalizarea întregii tranzacții și ar trebui să fie eliberat imediat ce obiectul blocat nu mai este necesar, egal cu nivelul de izolare al tranzacțiilor SERIALIZABILE

Instrucțiunea NOLOCK este executată fără a emite un blocaj partajat, permițând citiri murdare, care este egal cu nivelul de izolare al tranzacțiilor READ UNCOMMITTED

PAGLOCK folosește multiple blocări de pagină unde se folosește un blocaj de tabel

READPAST permite serverului sql să sară peste orice linii blocate și să execute tranzacții, iar pentru nivelurile de izolare a tranzacțiilor READ UNCOMMITTED, să sară doar blocările RID, nu și blocările de pagină, zonă și tabel

ROWLOCK impune utilizarea rowlock-urilor

TABLOCKX impune utilizarea unui blocaj exclusiv la nivel de tabel, care împiedică orice altă tranzacție să folosească tabelul în timpul tranzacției

UPLOCK forțează utilizarea actualizărilor atunci când citești un tabel fără blocare partajată

Notă: Diferența dintre blocarea unui tabel într-o bază de date
SELECT * FROM table WITH (HOLDLOCK) Alte tranzacții pot citi tabelul, dar nu pot actualiza sau șterge
SELECT * FROM table WITH (TABLOCKX) Alte tranzacții nu pot citi, actualiza și șterge tabele




Precedent:Afișaj dual screen pentru desktop la distanță Win10
Următor:.NET/C# Creează cont de portofel ETH și parolă de verificare bazată pe Nethereum [cu cod sursă]
 Proprietarul| Postat pe 14.01.2021 16:53:24 |
Testează blocarea TABLOCKX

SQL-ul de testare este următorul:


Testarea codului C#:


Descoperire,Întregul tabel este blocat, iar datele pot fi interogate doar când tranzacția este executată, așa cum se arată în figura de mai jos:



Șterge WITH(TABLOCKX) și actualizează datele doar cu ID 1, testul este următorul:



Deoarece Sarcina 2 și Sarcina 4 nu implică date cu id 1, interogarea este foarte rapidă, iar interogarea 3 și 4 trebuie să aștepte finalizarea tranzacției înainte de a interoga.

Comportamentul la modificarea datelor

Într-o tranzacție de citire angajată care folosește versiunarea rândurilor, selectați rândurile ce urmează a fi actualizate folosind o scanare blocantă, unde un blocaj de actualizare (U-lock) este aplicat asupra rândului de date atunci când valoarea datelor este citită. Aceasta este aceeași cu o tranzacție de citire angajată care nu folosește versiunarea liniei. Dacă un rând de date nu îndeplinește criteriile de actualizare, se eliberează un blocaj de actualizare pe acel rând, iar următorul rând este blocat și scanat.

Update Lock (U): Un mod de blocare care previne blocajele, unde două tranzacții citesc prima resursă de date În cazul modificărilor, utilizarea blocajelor partajate și exclusive cauzează uneori blocaje, în timp ce utilizarea blocajelor de actualizare poate evita apariția acestora. Blocajul de actualizare al resursei poate fi atribuit doar unei singure tranzacții odată, iar dacă resursa trebuie modificată, blocajul de actualizare devine exclusiv, altfel devine blocat partajat.

Autentificarea cu hyperlink este vizibilă.

 Proprietarul| Postat pe 28.01.2021 17:30:51 |
Problemă:

udpate a
coloană setată 1 = 1
unde idx = 1
Când sqlserver execută instrucțiunea update, blochează întregul tabel

Analiză:

structura de ceas,Fără o cheie primară, nu poți bloca doar rândurile
 Proprietarul| Postat pe 02.05.2023 11:47:24 |
Optimizarea interogărilor Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
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