Her insert cümlesi için sp_executesql komutunu SQL Server Profiler'da görüyorum.
Ürünlerimizden biri için veri tabanımızı ve sorgularımızı ayarlamak için, QA ortamında Profiler'i açmaya ve ne gösterdiğini görmeye karar verdim.
Aradığım her ek için gördüm, insert ekleme metni ile sp_executesql çağrısı yapıldı.
Bu büyük bir hit gibi görünüyor, bunu kapatmak için bir yolu var mı?
SQL Server 2008 R2 Standardı
Oluştur 14 eyl. 112011-09-14 15:41:27 Jeremy Boyd
Ben çok endişelenmem.
Fikir, yeniden kullanım için ifadeleri parametreleştirmektir.Yani derlemekten kaçının
3 farklı istemcinizin 3 ayrı ifade çalıştırdığını düşünün:
Bunların her birinin farklı metni var bu nedenle farklı bir plana derlenecek.Yani, 3 derleme ve 3 önbelleğe alınmış plan.
Şimdi, bu 3
Buradaki yeniden kullanılabilir plan ifade içindir.SELECT col1, col2 FROM SomeTable WHERE col3 = @p0yani sahipsinbirplan önbellektir.
Meşgul sistemlerde bu derleme zamanı önemlidir.Ve çoğu sorgu elbette bundan daha karmaşıktır: Bunu daha sonraki çalışma süreleri ile ilk çalıştırma süreleri için görebilirsiniz (bkz.Testing Query Speed)
Ayrıca karmaşık ve meşgul sistemlerde, plan önbellek boyutu sınırlandırılabilir veya RAM'i veri önbellekten (arabellek havuzu) uzaklaştırabilir, bu da işleri engelleyebilir.Aşırı 10000 plan veya yoğun bir web uygulaması için bir tane olabilir.(Etki 32 - 64 bit inceliklere bağlıdır)
Bazı ORM'ler ve sürücüler bu, genellikle "hazırlanmış ifadeler" veya bir seçeneğin kapatılmasına izin verir: ancak bazı şeyleri yavaşlatabileceği konusunda uyarılmalıdır."Bu büyük bir hit gibi görünüyor" dedin ki bu da yükten endişe duyduğunuz anlamına gelir ...
Oluştur 15 eyl. 112011-09-15 19:00:41 gbn
Bazı sistemlerin bunu neden yaptığını * neden * olarak açıkla.Depolanan yordamları kullanmadan SQL'lerini parametreleştirmelerini sağlar. – Nick Chammas 15 eyl. 112011-09-15 19:06:11
Anladığımdan emin değilim, sp_executesql kullanmayı bırakmak mı istiyorsunuz?Öyleyse, bu yöntemi kullanmamak için kodunuzu değiştirmeniz yeterlidir..NET'te SQLCommand nesnesinin sp_executsql kullanacağına inanıyorum, bu nedenle .NET kullanıyorsanız bu aramayı görmeyi beklemelisiniz.
Oluştur 14 eyl. 112011-09-14 23:31:54 SQLRockstar
Çoğu ORM kullanıyorsanız (Link2SQL, EF vb.) Bu sevimli küçük yöntemin kullanılmasına neden olurlar.Parametreli bir insert cümlesi yazıyorsanız, bu yöntemde de ortaya çıkacaktır.
Oluştur 15 eyl. 112011-09-15 04:49:52 mrdenny
Yani parametreleştirilmiş ekleri kullanarak bu sorunu çözemiyorum?Mesela ... hiç? – Jeremy Boyd 15 eyl. 112011-09-15 13:05:38
Hayır!Tek seçeneğiniz kendi saklı yordamınızı kullanmak olacaktır. – mrdenny 15 eyl. 112011-09-15 17:19:53
SQL Server, SQL Server 2008 R2'de zaman zaman yavaş
SQL profiler sunucu performansını etkiler mi?
SQL Server Bekler ve Sıralar'ı kullanarak bir Sharepoint sitesini ayarlama girişimi
Tek Sorgu için Üretim SQL Server Yüksek CPU
SQL Server 2008 datetime dizin performansı hatası
Yeni bir sunucuda daha kötü performans
Tablo değerli işlev hızlı çalışır, ancak başka bir işlevden yavaş çalışır
Sql profiler içinde sp_executesql ifadesini yakalamak
SQL Server 2014'teki CPU Time, SQL Server 2008 R2'den daha yavaş
SQL Server 2014'teki CPU Time, SQL Server 2008'den daha yavaş