it-swarm-eu.dev

Was ist Sperreneskalation?

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

49
Kilhoffer

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 Sperreneskalation konsolidiert das System mehrere Sperren auf einer höheren Ebene (z. B. mehrere Zeilensperren auf einer Seite oder mehrere Seiten auf einer ganzen Tabelle), um normalerweise Ressourcen wiederherzustellen, die von einer großen Anzahl feinkörniger Sperren beansprucht werden.

Dies geschieht automatisch, 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 übermäßig eifrige Eskalation von Sperren ein Problem, wenn zwei Prozesse gleichzeitig separate Zeilen auf dieselbe Seite schrieben. Wenn Sie weit genug zurückgehen (IIRC SQL Server 6.5), hatte SQL Server keine Zeilensperre, sondern konnte nur Tabellen oder Seiten sperren. Wo dies geschah, konnte es zu Konflikten zwischen Einfügungen von Datensätzen auf derselben Seite kommen. Oft haben Sie einen Clustered-Index in die Tabelle eingefügt, sodass neue Einfügungen auf andere Seiten verschoben wurden.

Dies ist eine Methode zur Reduzierung des Systemaufwands, 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 und diese Ihre maximal zulässige Anzahl von Sperren überschreiten, werden diese möglicherweise gegen eine Sperre für die gesamte Tabelle ausgetauscht.

21
Bill the Lizard

SQL Server sperrt die Eskalation , um den Speicheraufwand durch Konvertieren zu verringern mehrere feinkörnige Schlösser mit niedrigem Füllstand bis zu grobkörnigen Schlössern mit hohem Füllstand.

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

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

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

Der Lock-Eskalationsschwellenwert beträgt mindestens 5000 Sperren und hängt von mehreren Faktoren ab. Eine ausführliche Erklärung der Lock-Eskalation wurde hier in MSDN BoL erwähnt: - https://technet.Microsoft.com/en-us/library/ms184286 (v = sql.105) .aspx

12
Manoj Pandey

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

5
Richard T