Was ist eine Sperreneskalation?

47

Diese Frage wurde mir in einem Interview gestellt und ich hatte keine Antwort. Kann hier jemand erklären?


quelle

Antworten:

45

DB-Sperren können für Zeilen, Seiten oder ganze Tabellen oder Indizes vorhanden sein. Wenn eine Transaktion ausgeführt wird, belegen die von der Transaktion gehaltenen Sperren Ressourcen. Bei der Eskalation von Sperren führt das System mehrere Sperren auf einer höheren Ebene zusammen (z. B. mehrere Zeilensperren für eine Seite oder mehrere Seiten für eine ganze Tabelle), um Ressourcen wiederherzustellen, die von einer großen Anzahl fein abgestimmter Sperren belegt werden.

Dies wird automatisch durchgeführt, obwohl Sie Flags für die Tabellen setzen können (siehe ALTER TABLE in den Online-Büchern), um die Richtlinie für die Sperreneskalation für diese bestimmte Tabelle zu steuern. Insbesondere bei älteren Versionen von Sybase und SQL Server war eine vorzeitige oder zu eifrige Sperreneskalation ein Problem, wenn zwei Prozesse gleichzeitig separate Zeilen in dieselbe Seite schrieben. Wenn Sie weit genug zurückgehen (IIRC SQL Server 6.5) SQL Server verfügte nicht über eine Zeilensperre, sondern konnte nur Tabellen oder Seiten sperren. In diesem Fall kann es zu Konflikten zwischen Einfügungen von Datensätzen auf derselben Seite kommen. Häufig wurde ein Clustered-Index in die Tabelle eingefügt, sodass neue Einfügungen auf andere Seiten verschoben wurden.

Betroffen vonTunbridgeWells
quelle
3
Es sollte auch beachtet werden, dass wir keine Kontrolle darüber haben, wann der Server eskaliert.
Das machen wir jetzt. Es heißt T1211.
Joshua
@Joshua, Trace-Flag 1211 wird zum Deaktivieren der Sperreneskalation verwendet. Wir können SQL Server nicht anweisen, zu einem bestimmten Zeitpunkt zu eskalieren.
Nur ein Anfänger
10
Zeilensperren werden nicht zu Seitensperren, sondern direkt zu Tabellensperren eskaliert.
Manoj Pandey
Es ist wahr, was Manoj gesagt hat. Sie sollten diesen Teil Ihrer Antwort korrigieren, um zu vermeiden, dass weniger erfahrene SQL Server-Benutzer
irregeführt
20

Diese Methode reduziert den Systemaufwand, indem viele feinkörnige Sperren in weniger grobkörnige umgewandelt werden. Nähere Informationen finden Sie hier und hier .

Wenn Sie beispielsweise viele (normalerweise Hunderte oder mehr) Sperren für bestimmte Zeilen in einer Tabelle haben, werden diese möglicherweise gegen eine Sperre für die gesamte Tabelle ausgetauscht, sobald Sie die maximal zulässige Anzahl von Sperren überschritten haben.

Bill the Lizard
quelle
11

SQL Server führt eine Sperreneskalation durch, um den Speicheraufwand zu verringern , indem mehrere fein abgestimmte Sperren auf niedriger Ebene in grob abgestimmte Sperren auf hoher Ebene konvertiert werden.

  • Zeilensperren werden immer zu Tabellensperren und eskaliert
  • Seitensperren werden auch zu Tabellensperren eskaliert.

Es ist ein Mythos, dass Zeilensperren zu Seitensperren eskaliert werden. Dasselbe, das oben von @ConcernedOfTunbridgeWells erwähnt wurde, ist falsch.

Wenn eine Tabelle nur sehr wenige Zeilenaktualisierungen enthält, versucht die SQL-Engine, die Zeilensperren für diese Zeilen oder die Seitensperre für diese Seiten zu entfernen. Nehmen wir an, es hat Row-Lock gekostet. Wenn jedoch die Zeilenaktualisierung den Schwellenwert erhöht (~ 5k Sperren), wird anstelle mehrerer Zeilen-Sperren eine einzelne Tabellensperre verwendet. Auf diese Weise wird der Speicheraufwand reduziert, indem mehrere Zeilensperren aufgehoben und eine einzige Tabellensperre verwendet wird. Gleichzeitig wird jedoch die Parallelität erhöht. Gleiches passiert mit der Seitensperre.

Der Schwellenwert für die Sperreneskalation liegt bei mindestens 5000 Sperren und hängt von mehreren Faktoren ab. Eine ausführliche Erläuterung der Sperreneskalation finden Sie hier in der MSDN BoL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx

Manoj Pandey
quelle
5

Sperreneskalation bedeutet die Umwandlung einer Sperre in einen restriktiveren Modus. Dies tritt am häufigsten in Datenbanken auf. Bei einer Abfrage ist möglicherweise eine Ressource für "freigegeben" gesperrt und eskaliert zu "exklusiv", um eine Aktualisierung durchzuführen.

Richard T
quelle