|
|
Yayınlandı 21.05.2018 13:55:48
|
|
|

Son iki günde, oldukça sinir bozucu bir sorunla karşılaştım; SQL Server 2012'nin sorgu analizöründe yaklaşık 120 satırlık bir kayıtlı prosedür çalıştırılıyor, Hız çok ideal ve yaklaşık 500 veri kaydı 1 saniyeden kısa sürede filtrelenip yakalanabilir. Ancak, C# program kodunda çağrıldığında, bağlantı zaman aşımına bağlı olarak sorulur. CommandTimeout'u 300'e ayarsanız, görüntülenmesi yaklaşık 3 dakika sürer. Kodu birkaç kez kontrol ettim ve hata bulamadım. Sorun hâlâ devam ediyor.
Neden analizi: 1. Çünkü sorgu analizöründe yürütme hızı hızlıdır ve veri miktarı büyük değildir. 2. Programda sadece arama yavaş olur. 3. CommandTimeout parametresini ayarlayın, sonuç görüntülenebilir ama bu uzun sürecektir.
Özetle, sorunun C# kodunda yattığı ön aşamada sona ermiştir. Ancak denetimden sonra hiçbir kazanç olmadı.
Baidu'daki bu bilgileri kontrol edin. Sonunda CSDN forumunda benzer bir bilgi gönderisi buldum. İnternet kullanıcılarından biri yanıtta, "Uygulama planının süresi dolması mümkün" dedi. Rüyamda gerçekten uyandırdım.
Hemen sorgu analizöründe gerçekleştirin:
Programı tekrar test ettim, bu sefer sonunda işe yaradı. Hız çok tatmin edici.
Neden analizi: Depolanan prosedürler önceden derlenmiş olduğundan, bir yürütme planı ilk yürütmede oluşturulur ve bu yürütme planı, her yürütüldüğünde bir yürütme planı oluşturmak yerine sonraki yürütmelerde (saklanan prosedürün yeniden derlenmesi belirtilmedikçe) kullanılır. Depolanan prosedürde yer alan nesne yapısı ayarlandığında veya ilgili veriler önemli ölçüde değiştiğinde, bu da orijinal planın mevcut duruma (yürütme planının süresi dağı) uygun olmamasına neden olabilir, depolanan prosedür yeniden derlenmelidir.
Son olarak, depolanan prosedürün kodu eklensin:
|
Önceki:Tek bir APP promosyon sayfası kod kaynağını paylaş, uyarlanabilir, çok güzel ve cömert!Önümüzdeki:C# Açık Kaynak Çerçevesi (Yeniden Baskı)
|