Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 19946|Antwort: 3

[Quelle] Datenbanksperren NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Link kopieren]
Veröffentlicht am 14.01.2021 15:23:14 | | | |
NOLOCK
Wenn diese Option ausgewählt ist, liest oder verändert SQL Server Daten ohne jegliche Sperren. In diesem Fall kann der Benutzer Daten aus einer nicht gebundenen Transaktion oder einem Rollback, bekannt als "Dirty Data", lesen.

HOLDLOCK
Wenn diese Option ausgewählt ist, hält SQL Server diese geteilte Sperre bis zum Ende der gesamten Transaktion aufrecht, ohne sie unterwegs freizugeben.

UPDLOCK
Wenn diese Option ausgewählt ist, verwendet SQL Server beim Lesen der Daten ein Modified-Lock anstelle eines gemeinsamen Locks und hält dieses Lock bis zum Ende der gesamten Transaktion oder des Befehls aufrecht. Diese Option stellt sicher, dass mehrere Prozesse gleichzeitig Daten lesen können, aber nur dieser Prozess die Daten ändern kann.

TABLOCK
Wenn diese Option ausgewählt ist, legt SQL Server eine gemeinsame Sperre auf die gesamte Tabelle, bis der Befehl endet. Diese Option stellt sicher, dass andere Prozesse die Daten nur lesen und nicht verändern können.

PAGLOCK
Diese Option ist die Standardoption, und wenn ausgewählt, verwendet SQL Server eine geteilte Seitensperre.

TABLOCKX (Exklusives Tischschloss)
Wenn diese Option ausgewählt ist, setzt SQL Server eine Sperre auf die gesamte Tabelle, bis der Befehl oder die Transaktion endet. Dies verhindert, dass andere Prozesse die Daten in der Tabelle lesen oder verändern.

HOLDLOCK hält das geteilte Schloss, bis die gesamte Transaktion abgeschlossen ist, und sollte freigegeben werden, sobald das gesperrte Objekt nicht mehr benötigt wird, entsprechend dem SERIALIZABLE-Transaktionsisolationsniveau

Die NOLOCK-Anweisung wird ausgeführt, ohne eine gemeinsame Sperre auszustellen, was Dirty Reads erlaubt, was dem READ UNCOMMITTED Transaktionsisolationslevel entspricht

PAGLOCK verwendet mehrere Seitensperren, bei denen eine Tabellensperre verwendet wird

READPAST erlaubt es dem SQL-Server, alle gesperrten Zeilen zu überspringen und Transaktionen auszuführen, und bei READ UNCOMMITTED Transaktionsisolationsstufen nur RID-Sperren zu überspringen, nicht Seiten-, Zonen- und Tabellensperren

ROWLOCK erzwingt die Verwendung von Rowlocks

TABLOCKX erzwingt die Verwendung einer exklusiven Tabellensperre, die verhindert, dass andere Transaktionen die Tabelle während der Transaktion verwenden

UPLOCK erzwingt die Verwendung von Updates beim Lesen einer Tabelle ohne geteilte Sperre

Hinweis: Der Unterschied zwischen dem Sperren einer Tabelle in einer Datenbank
AUSWÄHLEN * AUS der Tabelle MIT (HOLDLOCK) Andere Transaktionen können die Tabelle lesen, können aber nicht aktualisieren oder löschen
AUSWÄHLEN * AUS der Tabelle MIT (TABLOCKX) Andere Transaktionen können keine Tabellen lesen, aktualisieren und löschen




Vorhergehend:Win10 Remote Desktop Dual-Screen-Display
Nächster:.NET/C# Erstellen Sie ein ETH-Wallet-Konto und ein Verifizierungspasswort basierend auf Nethereum [mit Quellcode]
 Vermieter| Veröffentlicht am 14.01.2021 16:53:24 |
Testen Sie das TABLOCKX-Schloss

Das Test-SQL ist wie folgt:


Test des C#-Codes:


Entdeckung,Die gesamte Tabelle ist gesperrt, und die Daten können nur abgefragt werden, wenn die Transaktion ausgeführt wird, wie in der untenstehenden Abbildung dargestellt:



Lösche WITH(TABLOCKX) und aktualisiere die Daten nur mit ID 1, der Test sieht wie folgt aus:



Da Aufgabe 2 und Aufgabe 4 keine Daten mit id 1 beinhalten, ist die Abfrage sehr schnell, und 3 und 4 müssen warten, bis die Transaktion abgeschlossen ist, bevor sie abfragen können.

Verhalten bei der Datenänderung

Bei einer committierten Lesetransaktion, die Zeilenversionierung verwendet, wählen Sie die zu aktualisierenden Zeilen mit einem Blocking-Scan aus, bei dem beim Lesen des Datenwerts eine Update-Sperre (U-Lock) auf die Datenzeile angewendet wird. Dies ist dasselbe wie eine committed read-Transaktion, die keine Zeilenversionierung verwendet. Wenn eine Datenzeile die Aktualisierungskriterien nicht erfüllt, wird eine Aktualisierungssperre für diese Zeile aufgehoben und die nächste Zeile wird gesperrt und gescannt.

Update Lock (U): Ein Lock-Modus, der Deadlocks verhindert, bei dem zwei Transaktionen zuerst eine Datenressource lesen. Im Falle einer Änderung führen die Verwendung von geteilten und exklusiven Sperren manchmal zu Deadlocks, während die Verwendung von Update-Sperren das Auftreten von Deadlocks vermeiden kann. Das Update-Lock der Ressource kann jeweils nur einer Transaktion zugewiesen werden, und wenn die Ressource geändert werden muss, wird das Update-Lock zu einem exklusiven Lock, andernfalls zu einem gemeinsamen Lock.

Der Hyperlink-Login ist sichtbar.

 Vermieter| Veröffentlicht am 28.01.2021 17:30:51 |
Ausstellen:

udpate a
Set-Spalte1 = 1
wobei idx = 1
Wenn sqlserver die Update-Anweisung ausführt, sperrt es die gesamte Tabelle

Analyse:

Uhrenstruktur,Ohne einen Primärschlüssel kannst du nicht nur die Reihen sperren
 Vermieter| Veröffentlicht am 02.05.2023 11:47:24 |
Entitätsrahmen-Abfrageoptimierung WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com