Frage

kann ich sehen, wie Zeilenebene und Seitenebene deaktivieren in SQL Server blockiert, aber ich kann nicht einen Weg zu zwingen, SQL Server zu verwenden Sperren auf Zeilenebene finden. Gibt es eine Möglichkeit SQL Server Sperr Verwendung Zeilenebene zu zwingen und NICHT Seite Sperren verwenden?

War es hilfreich?

Lösung

Sie können die ROWLOCK Hinweis verwenden, aber AFAIK SQL entscheiden, kann es zu eskalieren, wenn es nicht genügend Ressourcen läuft

Vom doco :

  

ROWLOCK Gibt an, dass Zeilensperren sind   wenn Seiten- oder Tabellensperren genommen sind   gewöhnlich genommen. Wenn angegeben in   Transaktionen im SNAPSHOT Betrieb   Isolationsstufe, sind Zeilensperren nicht   genommen, es sei denn ROWLOCK mit kombiniert wird   andere Tabellenhinweise, die Sperren erfordern,   wie UPDLOCK und HOLDLOCK.

und

  

Sperrhinweise ROWLOCK, UPDLOCK UND XLOCK   dass acquire Zeilensperren kann statt   Sperren für Indexschlüssel und nicht der   tatsächliche Datenzeilen. Wenn zum Beispiel ein   Tabelle hat einen nicht gruppierten Index und eine   SELECT-Anweisung einen Sperrhinweis verwenden ist   durch einen abdeckenden Index behandelt, ist eine Sperre   auf dem Indexschlüssel erworben in der   abdeckenden Index und nicht auf den Daten   Zeile in der Basistabelle.

Und schließlich das gibt ein ziemlich in die Tiefe gehende Erklärung über Sperreneskalation in SQL Server 2005, die in SQL Server 2008.

geändert wurde

Es gibt auch die sehr in die Tiefe: Sperren in der Datenbank-Engine (in Büchern online)

Also, im allgemeinen

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Sollte in Ordnung sein, aber je nach dem Indizes und Last auf dem Server kann es zu einer Seitensperre eskaliert enden.

Andere Tipps

Verwenden Sie die ALLOW_PAGE_LOCKS Klausel von ALTER / CREATE INDEX :

ALTER INDEX indexname ON tablename SET (ALLOW_PAGE_LOCKS = OFF);

Sie können nicht wirklich das Optimierungsprogramm zwingen, etwas zu tun, aber man kann es führen.

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Siehe   - Controlling SQL Server mit Locking und Hinweise

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top