5 ila 10 dakika arasında tamamlanması uzun süren bir Select işlemim var.
Şu anda MS SQL veritabanı motoru için bir ipucu olarak kullanmıyorum NOLOCK
.
Aynı zamanda aynı veri tabanına ve aynı tablolara güncelleme ve ekleme yapan başka bir işlemimiz var.
İlk süreç başladı, yakın zamanda bir mesajla vaktinden önce sona erdi
SQLEXCEPTION: İşlem, başka bir işlemle kilit kaynaklarında kilitlendi ve kilitlenme kurbanı olarak seçildi.
Bu ilk işlem, diğer sitelerde aynı koşullarda, ancak daha küçük veri tabanlarında yürütülür ve bu nedenle söz konusu select ifadesi çok daha kısa bir süre alır (30 saniye civarında). Bu diğer sitelerde, diğer sitelerde kilitlenme mesajı almıyorum. Bu mesajı başlangıçta sorun yaşayan sitede de almadım, ancak veritabanı büyüdükçe bazı eşikleri aştığıma inanıyorum. İşte sorularım:
- Bir işlemin yürütülmesi için geçen süre, ilgili sürecin bir kilitlenme kurbanı olarak işaretlenme olasılığını artırabilir mi?
- Seçimi bir NOLOCK ipucu ile yürütürsem, bu sorunu giderir mi?
- Select deyimindeki WHERE yan tümcesinin bir parçası olarak kontrol edilen bir datetime alanının yavaş arama süresine neden olduğundan şüpheleniyorum. Bu alana dayalı olarak bir dizin oluşturabilir miyim? Tavsiye edilir mi?