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: 11079|Răspunde: 1

[Sursă] MSSQL CU (NOLOCK) citire murdară

[Copiază linkul]
Postat la 2020-4-3 10:06:04 | | |
Dezavantaje:

1. Va produce o citire murdară

2. Aplicabil doar instrucțiunilor de interogare selectate

Pro:

1. Unele fișiere spun că eficiența interogărilor SQL cu WITH (NOLOCK) poate fi crescută cu 33%.

2. Poate fi folosit pentru instrucțiuni interne join

Citire murdară: Un utilizator face o modificare la o resursă, iar un alt utilizator citește înregistrarea modificată, iar primul utilizator renunță la modificare, iar datele revin la modificarea anterioară, aceste două rezultate diferite sunt citiri murdare.

Detalii:

Pentru a îmbunătăți performanța interogărilor SQL, în general, prima considerație este crearea unui index. De fapt, pe lângă stabilirea indexurilor, atunci când plasăm comenzi SQL, adăugarea unei secțiuni WITH (NOLOCK) la sintaxă poate îmbunătăți fenomenul de blocare a seturilor de date într-un mediu cu un număr mare de interogări online, îmbunătățind astfel performanța interogării.

Totuși, un lucru de reținut este că SQL SELECT cu (NOLOCK) poate cauza Dirty Read.

De exemplu:

Pe lângă simpla SELECT, poți folosi și sintaxa SELECT cu JOIN. Dar comenzile DELETE, INSERT, UPDATE și alte comenzi care necesită tranzacții nu sunt bune...


Unele fișiere spun că eficiența interogărilor SQL poate fi crescută cu 33% cu WITH (NOLOCK).
Adăugarea WITH (NOLOCK) indică SQL Server că comanda noastră SELECT nu trebuie să ia în considerare starea blocării tranzacțiilor a tabelului curent, astfel că performanța va fi semnificativ îmbunătățită, iar fenomenul blocării sistemului de baze de date va fi redus semnificativ (inclusiv blocarea moartă).

Un lucru de reținut este că, deoarece WITH (NOLOCK) nu ia în considerare blocarea tranzacțiilor din tabelul curent, atunci când există date aflate în mai multe faze (de exemplu, tranzacții pe mai multe tabele – >de exemplu, sisteme de retragere), WITH (NOLOCK) ignoră datele care procesează în prezent procesul de tranzacție...

Ca să fiu direct, atunci când folosești NoLock, permite citirea datelor modificate, dar tranzacția nu a fost încă finalizată. Prin urmare, dacă trebuie să iei în considerare integritatea în timp real a datelor tranzacțiilor, ar trebui să te gândești cu atenție la utilizarea WITH (NOLOCK).

Dacă nu trebuie să iei în considerare tranzacțiile, WITH (NOLOCK) poate fi o referință utilă.

Notă 1: CU ( < table_hint > )
Specifică scanarea tabelului, unul sau mai mulți indici folosiți de optimizatorul de interogări,
Sau de către optimizatorul de interogări pentru a valorifica acest tabel de date și a folosi modul de blocare pentru această afirmație.

Notă 2: WITH (NOLOCK) este echivalent cu READ UNCOMMITTED





Precedent:Latența maestr-sclav a bazei de date duce la o rezolvare inexactă a interogărilor
Următor:S-a rezolvat problema că Fiddler nu putea crawla localhost-ul local, cererile de rețea 127.0.0.1
Postat la 2020-4-5 14:21:36 |
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