2009-05-08 17 views
15

Uygulamam, Zaman Aşımına Uğrayan SqlExceptions uygulamasına devam ediyor. Mesele şu ki, bu sorgu basit bir süre için koşmak zorunda olacak bir sorgu. Yine de bu istisnanın meydana geldiği yeri bulmakta zorlanıyorum. Bu, veritabanı sunucusunda oluşturulan bir zaman aşımı mı yoksa programımda mı oluyor? Ya da her ikisi de olabilirse, hangisinin olduğunu nasıl anlarım?Zaman aşımı süresi doldu SqlExceptions LINQ to SQL?

Ve son olarak, zaman aşımı süresini nasıl uzatabilirim?

cevap

10

DataContext'inizde CommandTimeout kümesinin üzerinde çalışıyor olmanız olasıdır. Bu varsayılan 30 saniyedir.

Yapmanız gereken tek şey, sorgunuzu yürütmeden önce DataContext'teki özelliği ayarlamaktır.

+3

Ve buna nasıl yapmalıyım? –

3

Bu, varsayılan zaman aşımının 30 saniyelik bir süre sonra gerçekleşmesi nedeniyle gerçekleşir. Bağlantı dizesinde bir Zaman Aşımı özniteliği ayarlayarak bunu değiştirebilirsiniz. Alternatley bunu DataContext'da ayarlayabilirsiniz.

İşte bu konuda bir kod projesi olan bir article.

15

artış zaman aşımı = KÖTÜ
düzeltme sorgu = İYİ

Ben katılan tüm detayların emin değilim, ama genel olarak followng geçerlidir:

bir sorgu yavaş do çalıştırdığında yönetim stüdyoda şu:

  • çalıştırmak SET SHOWPLAN_ALL ÜZERİNEsorgunuzu
  • "scan" kelimesinin çıkışına bakın. senin sorunun var.

"Tara" = her satıra (tablo veya dizin) dokunun. Bir numarayı arayan bir telefon rehberini "taramak" veya dizini kullanmak ister misiniz?

+2

Sorguyu olabildiğince fazla ayarladık. Ne yazık ki, bağlantılı bir sunucu üzerinden 2 milyon kayıttan oluşan bir tablodan 15k kayıtları çekmeyi hızlandırmak için yapabileceğiniz çok şey var. –

+0

Sorunuzu düzenleyin ve çıktıyı SET ShowPlan_All ON –

+1

@Jason Baker'dan alın, 2 milyondan fazla satır içeren birden çok tabloya katılan birçok sorgum var ve 30 saniyeden daha hızlı çalışıyorlar. "Sorguyu olabildiğince fazla ayarladık" diyorsunuz ve bu yüzden yardımımı teklif ediyordum. –