Sorgu yürütme süremi en iyileştirme çalışıyorum En Düşük Kilit düzeyini kullanma (Satır kilidi) ancak bu, "daha yüksek Kilit Düzeyine İzin Verilir (IX)" izleme yapıldığında SQL profiler içinde,SQL Server Kilitleme ipucunu ekleme Ekleme Belirtilen Kilidi Vermez
Benim senaryo:
- iki tablo
dbo.Students
vedbo.University
dbo.Students
University
tabloya bir yabancı anahtar sütunu vardır olduğunu varsayarak
Sorgu
INSERT INTO dbo.Students WITH (ROWLOCK) (UniversityId, StudentName)
zaman İz Kilitler sql profilinde
Student
tablo verilmişUniversity
tablo verilmiş sch_s (şema stabilizasyon) (niyet Münhasır) IX
ve relea önce verilen ve serbest bırakılan birçok Sayfa ve Anahtar kilitler var Bu iki kilidi söyle.
Herkes sadece öğrenci masasında satır kilitleri vermeme yardım edebilir mi?
ALTER TABLE dbo.Students
...
[ADD CONSTRAINT constraint_name]
FOREIGN KEY (UniversityId)
REFERENCES dbo.University (UniversityId)
Çok büyük olasılıkla, bu kısıt etkindir (sys.foreign_keys.is_disabled
bakınız) ve: davranış
FK'yi düşürmediğiniz sürece başvurulan tabloya kilitleniyor olacaksınız.Sunucu, bu denetimi yapmadan veri bütünlüğünü nasıl kontrol etmelidir (yani, başvurulan tabloda ilgili satırın aranması)? Burada optimize edilecek bir şey olduğundan emin misin? İçindeki tek işlem değilse, endekslerin sayısını, tetikleyicilere ve tüm işlemin uzunluğuna bakmalısınız. –
emin değilim ama tüm tablodaki IX (özel niyet) Lock düzeyini aşağı indirebileceğimi düşündüm RowX'e (yalnızca satırda özel) kimliği birincil anahtar sütunundan kaldırmayı denedim ama yine de Tüm tablo @IvanStarostin –
Bu kilitler kesinlikle doğrudur - diğer işlemlere, yalnızca tüm tabloyu veya sayfayı (kilitli satırın nerede olduğu) kilitleyemediklerini söylerler çünkü bir kısmı şu an kilitlenmiş durumdadır. IX kilitleri, bu kadar düşük seviyeli kilitlerin varlığını kontrol eder. Aksi halde sunucu, her satırı, sonuç olarak kontrol etmek zorunda kalacaktı. Söylediğiniz her şey hala bir erken optimizasyona benziyor. Seçiminiz bir sebepten ötürü kilitli kalırsa, seçiminizi optimize edin. Bu bir atomik inserttir (tetikleyici veya bir şey yoksa). "Optimizasyon" için bir nedeniniz olduğundan emin misiniz? –