LCK_M_S
Bei Verwendung von RCSI wird auf gemeinsam genutzte Sperren ( ) gewartet. Meines Wissens nach sollte dies nicht passieren, da SELECTs
bei Verwendung von RCSI keine gemeinsamen Sperren erforderlich sind.
Wie kann ich freigegebene Sperren sehen? Liegt es an Fremdschlüsseln?
sql-server
sql-server-2008
locking
snapshot-isolation
grassbl8d
quelle
quelle
Antworten:
Ja. SQL Server kehrt beim Zugriff auf eine Tabelle zum Überprüfen der Fremdschlüsseleinschränkungen auf die Sperrimplementierung der isolierten Leseisolationsstufe zurück. Dies ist für die Richtigkeit erforderlich und kann nicht deaktiviert werden.
Das Verhalten gilt nur für Datenänderungsanweisungen. Freigegebene Sperren werden nur beim Überprüfen der fremdschlüsselbezogenen Daten verwendet. Andere Datenzugriffe im selben Ausführungsplan können weiterhin die Zeilenversionierung verwenden.
Wenn SQL Server dies nicht tut, können Datenänderungsanweisungen unter
RCSI
die Fremdschlüsseleinschränkung verletzen, da bei der Integritätsprüfung veraltete (versionierte) Daten verwendet werden.Leider gibt es derzeit keine unterstützte Möglichkeit, diese Änderung des Sperrverhaltens in einem Ausführungsplan anzuzeigen. Es ist möglich, die internen Sperrhinweise zu sehen, wenn das Ablaufverfolgungsflag 8607 aktiv ist.
quelle