2008-09-19 8 views
9

Unten ist eine Liste der Sperren, die SQL Server 2000 unterstützen soll. Ich bin ein bisschen verwirrt darüber, was die "Absicht" -Sperren eigentlich bedeuten. Ich habe mich im Internet umgeschaut und die Antworten scheinen etwas kryptisch zu sein.SQL Server-Sperren erklärt

Neben der Antwort auf meine spezifische Frage hoffe ich, diese Frage als Wiki zu verwenden, um herauszufinden, was jedes Schloss bedeutet und unter welchen Umständen diese Art von Schloss erworben wird.

  • Geteilt (S)
    • Update (U)
    • Exclusive (X)
    • Intent
      • Absicht geteilt (IS)
      • Absicht Exclusive (IX)
      • geteilt mit Absicht exklusiv (SIX)
      • Vorsatzes Update (IU)
      • Aktualisierungsabsichts Exclusive (UIX)
      • beabsichtigte gemeinsame Update (SIU)
    • Schema
      • Schemaänderung (Sch-M)
      • Schema Stabilität (Sch-S)
    • Massenaktualisierung (BU)
    • Key Range
      • Shared Key-Bereich und Shared Resource Sperre (RangeS_S)
      • Shared Key-Bereich und Update-Ressourcensperre (RangeS_U)
      • Insert Key-Bereich und Null Ressourcensperre (RangeI_N)
      • Exclusive Key-Bereich und exklusive Ressourcen-Verwaltung (RangeX_X)
      • Conversion Locks (RangeI_S, RangeI_U, RangeI_X, RangeX_S, RangeX_U)
+0

Sollte diese Art von Frage Community-Besitz sein? Ich meine, weil es eine Menge Arbeit zu beantworten scheint. Aber es ist nur ein Vorschlag. –

+0

stimme mit Sergio überein, aber wenn genug rep-heeavy Mitglied es bearbeiten, wird es ein Gemeinschaftspost kommen. mehr Leute können einen Beitrag leisten, wenn das OP es Community-basiert macht. – cori

Antwort

6

Die Absichtssperren werden auf Tabellenebene platziert und zeigen an, dass eine Transaktion für bestimmte Zeilen in der Tabelle entsprechende Sperren platziert.

Dies beschleunigt die Konfliktprüfung für Transaktionen, die Sperren auf Tabellenebene platzieren müssen. Zum Beispiel kann eine Transaktion, die eine exklusive Sperre für eine Tabelle benötigt, den Konflikt auf Tabellenebene erkennen (die "Absicht geteilt" -Sperre wird dort sein), anstatt alle Zeilen (oder Seiten) für gemeinsame Sperren untersuchen zu müssen.

11

Die SQL server MSDN page hat eine plausible Erklärung:

Eine Absichtssperre zeigt an, dass SQL Server will eine gemeinsame Sperre (S) oder exklusive Sperre (X) auf einige der Ressourcen weiter unten in der Hierarchie erwerben.Zum Beispiel bedeutet eine Shared Intent-Sperre auf Tabellenebene, dass eine Transaktion Shared (S) -Sperren auf Seiten oder Zeilen in dieser Tabelle platziert. Das Festlegen einer Absichtssperre auf Tabellenebene verhindert, dass eine andere Transaktion anschließend eine exklusive Sperre (X) für die Tabelle erhält, die diese Seite enthält. Intent-Sperren verbessern die Leistung, da SQL Server beabsichtigte Sperren nur auf Tabellenebene untersucht, um zu ermitteln, ob eine Transaktion eine Sperre für diese Tabelle erhalten kann. Dadurch entfällt die Anforderung, jede Zeile oder Seitensperre für die Tabelle zu überprüfen, um festzustellen, ob eine Transaktion die gesamte Tabelle sperren kann.

1

Ein weiteres wichtiges Merkmal der Absichtssperren ist, dass Sie don‘ t sie explizit aus dem Code platzieren, werden sie implizit angefordert, wenn Sie eine Nicht-Absichts-Sperre platzieren.