Frage

Ich möchte einige Fragen in Bezug auf SQL Server Locking-Mechanismus fragen

  1. Wenn ich nicht den Sperrhinweis mit SQL-Anweisung verwenden, SQL Server verwenden PageLock Hinweis standardmäßig. habe ich recht??? Wenn ja, dann warum? kann seine aufgrund der Verwaltung zu viele Sperren auf den Faktor sein, dies ist die einzige Sache, die ich als Nachteil haben, aber bitte lassen Sie mich wissen, wenn es andere gibt. und sagen Sie mir, auch wenn wir dieses Standardverhalten, wenn billige ändern zu tun.

  2. Ich bin eine serverseitige Anwendung zu schreiben, ein Sync Server (nicht Sync Framework) und ich habe Datenbankabfragen in C # -Code-Datei geschrieben und mit ODBC-Verbindung, um sie auszuführen. Jetzt Frage ist, was der beste Weg ist, um die Standard-Verriegelung von Page nach Row Haltung Nachteilen im Auge zu ändern (zum Beispiel des Hinzufügen Sperrhinweis in Abfragen dies ist, was ich bin die Planung für).

  3. Was passiert, wenn eine SQL-Abfrage (SELECT / DML) wird ohne den Umfang der Transaktion und Anweisung ausgeführt wird, enthält Sperrhinweis dann, was Art von Sperre erworben werden (z geteilt, zu aktualisieren, exklusiv)? Und während in Transaktionsbereich tut Isolation Level der Transaktion hat Auswirkungen auf die Lock-Typ, wenn ROWLOCK Hinweis verwendet wird.

  4. Schließlich Wenn einige könnte ich probieren, damit ich testen konnte und erleben Sie alle meine Selbst oben genannten Szenarien (z dot net-Code oder SQL-Skript)

Danke Mubashar

War es hilfreich?

Lösung

  1. Nein. Er verriegelt, wie es für richtig hält und eskaliert Schlösser je nach Bedarf

  2. Lassen Sie den DB-Engine es verwalten

  3. Siehe auch Punkt 2

  4. Siehe auch Punkt 2

Ich würde nur Sperrhinweise verwenden, wenn Sie spezifische und bestimmte Verhaltensweisen wollen zB Warteschlangen oder nicht blockierende (dirty) liest.

Generell warum die DB-Engine kann nicht tun, was Sie standardmäßig mögen?

Andere Tipps

Die Standard Sperren sind nicht Zeilensperren Seitensperren, obwohl die Art und Weise, in der der Verriegelungsmechanismus Mittel arbeitet man Schlösser an allen Objekten innerhalb der Hierarchie wird Platzieren z.B. eine einzelne Zeile liest, wird eine gemeinsame Sperre auf den Tisch legen, eine gemeinsame Sperre auf der Seite und dann der Reihe eine gemeinsame Sperre auf.

Dies ermöglicht eine Aktion eine exklusive Sperre auf dem Tisch anfordernden zu wissen, dass es sie noch nicht in Anspruch nehmen, da es eine gemeinsame ist Sperre vorhanden (sonst hätte es jede Seite / Zeile für Schlösser überprüfen.)

Wenn Sie zu viele Sperren für eine einzelne Abfrage jedoch ausgeben, führt es eine Sperreneskalation, die die Granularität der Sperre reduziert - damit ist es weniger Sperren zu verwalten. Dies kann mit Hilfe eines Trace-Flag ausgeschaltet, aber ich würde es nicht in Betracht ziehen.

Bis Sie wissen, dass Sie tatsächlich ein Verriegelungs- / Sperreskalation Problem haben Sie vorzeitig Risiko, ein nicht-existentes Problem zu optimieren.

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