ASP.NET'te (EF Linq) çalıştırmak için yaklaşık 40 saniye süren bir MS SQL sorgum var. Ben Profiler'da onu esir ve yaklaşık 40 saniyelik bir süreye gösterir:Sorgu ASP.net ve Profiler'de çok yavaş, ancak SQL Management Studio 2014'te hızlıdır
Ancak, ben/kopyalarken SQL Management Studio o 00:00:00 saniyede çalışıyor bu yapıştırın. Tek bir tabloda basit bir select
(Katılma, Görüntüleme, Saklı Yordam yok) ve yaklaşık 10.000 satır döndürür.
Yürütme planı:
Ben this blog için this question on StackOverflow cadı noktaları okumak ve Yönetim Studio sorguda yukarıdaki KAPALI
SET ARITHABORT
yerleştirilir ama bu kötü kokan Yavaş yap, bu yüzden sorun olduğunu düşünmüyorum.
Garip bir şey, uygulamayı Windows 2012/SQL 2014 Web Edition ile daha hızlı bir sunucuya geçirdiğimiz ve bu nedenle zaman sorgularının daha yavaş çalıştığı görülüyor. Aynı sorgu, eski Windows 2008R2 Server'ımızda SQL Express 2008R2 ile çok daha hızlı çalıştı.
* Önemli * darbeye sahip olabilecek ve aynı ön tanımlı olmayan bir dizi 'SET' seçeneği vardır. İlk olarak, SSMS'de https://www.mssqltips.com/sqlservertip/1415/determining-set-options-for-a-current-session-in-sql-server/ gibi bir şey çalıştırmak olurdu. Ham ADO.NET üzerinden (sorgulama yapmak için sorgulamayı kesmeniz gerekebilir, çünkü "PRINT" ADO.NET'ten gelen bir acıdır, ancak: 'sadece' seçeneğinin her ikisinde de '@ OPTIONS' seçeneği yeterlidir). Hangi bayrakların (varsa) farklı olduğunu görün. Yerel olarak bir çek olarak deneyeceğim. –
Hmm, yerel olarak bakıldığında, tek delta zaten kullandığınız "ARITHABORT". Merak ediyorum, eğer bu kötü bir parametre optimizasyonu/sorgu planı oluşturma ise. SQL'i kendiniz yazıyorsanız, 'OPTIMIZE FOR' /' UNKNOWN' ipuçlarını kullanabilirsiniz. Eğer SQL'i kendiniz yazmıyorsanız: o zaman ... evet, bu zor bir şey. Bunu oldukça sık yapmak zorundayız - garip bir şekilde, buna "biz Jon Skeet/yeni kullanıcı problemi" diyoruz - verilerimizin düzeni, yeni kullanıcılar ve kitlesel olarak Jon gibi kullanıcılara büyük çapta çarpıtılma eğilimi gösteriyor. –
@Marc, yardımlarınız için teşekkürler. SQL Studio 'Seçenekler = 5496' verir, ancak benim uygulamadan (varlık çerçeve bağlamında bir' IDbConnection' oluşturuldu) 'Seçenekler = 5432' verir. Fark gerçekten "ARITHABORT". – roberth