Ich versuche, meine Abfrageausführungszeit zu optimieren Verwenden Lowest Lock-Ebene (Rowlock) aber es wird nicht wirksam "höhere Lock-Ebene (IX) gewährt" bei der Ablaufverfolgung in SQL Profiler,SQL Server-Sperrhinweis in Einfügung Anweisung erteilt die angegebene Sperre nicht
Mein Szenario:
- vorausgesetzt, ich habe zwei Tabellen
dbo.Students
unddbo.University
dbo.Students
hat eine Fremdschlüsselspalte zurUniversity
Tabelle
Abfrage
INSERT INTO dbo.Students WITH (ROWLOCK) (UniversityId, StudentName)
Wenn Trace Locks in SQL-Profil
Student
Tabelle gewährt IX (Intent Exclusive)University
Tabelle gewährt sch_s (Schema Stabilisierung)
und Dort werden viele Page- und Key-Locks erteilt und vor Freigabe freigegeben singe diese zwei Schlösser.
Kann jemand mir helfen, Reihensperren nur in der Kursteilnehmertabelle zu gewähren?
Sie erhalten Sperren auf referenzierte Tabelle, wenn Sie den FK fallen lassen.Wie sollte der Server die Datenintegrität prüfen, ohne diese Prüfung durchzuführen (d. H. Nach der entsprechenden Zeile in der referenzierten Tabelle zu suchen)? Sind Sie sicher, dass hier etwas zu optimieren ist? Vielleicht sollten Sie die Anzahl der Indizes, die Trigger und die Länge der gesamten Transaktion betrachten, wenn dies nicht die einzige Operation ist? –
Ich bin mir nicht sicher, aber ich dachte, ich kann die Sperre Ebene von IX (Intent exklusiv) auf die gesamte Tabelle zu reduzieren To RowX (Exklusiv nur in Zeile) Ich versuchte, die Identität aus der Primärschlüsselspalte zu entfernen, aber es gewährte weiterhin Sperre auf die ganze Tabelle @IvanStarostin –
Diese Sperren sind absolut korrekt - sie sagen zu anderen Transaktionen, dass sie nicht ausschließlich ganze Tabelle oder Seite sperren können (wo die gesperrte Zeile liegt), weil ein Teil davon bereits jetzt gesperrt ist. IX-Sperren beschleunigen die Überprüfung auf das Vorhandensein solcher untergeordneten Sperren. Andernfalls müsste der Server jede Zeile konsequent überprüfen. Und alles was du sagst, sieht immer noch wie eine vorzeitige Optimierung aus. Wenn Ihre Auswahl aus irgendeinem Grund gesperrt bleibt, optimieren Sie Ihre Auswahl. Dies ist eine atomare Einfügung (wenn es keine Trigger oder etwas gibt). Sind Sie sicher, dass Sie einen Grund haben, es zu "optimieren"? –