SQL sunucusu için bağlantı zaman aşımı


109

İçindeki bağlantı dizesini değiştirerek zaman aşımını artırabilir miyim web.config?


7
Bunu, zaman aşımının sorgu yürütmeyi kontrol edeceğini düşündüğüm gibi okumayın - bu değil, yalnızca sunucuya bağlanmak için zaman aşımı - "bağlantı zaman aşımı" daha iyi bir isim olurdu. Bkz stackoverflow.com/a/7976867/409856
downwitch

Yanıtlar:


213

Evet, ekler olabilir ;Connection Timeout=30sizin için bağlantı dizesi ve istediğiniz değeri belirtin.

Connection TimeoutÖzellik içinde ayarlanan zaman aşımı değeri , saniye cinsinden ifade edilen bir zamandır . Bu özellik ayarlanmazsa, bağlantının zaman aşımı değeri varsayılan değerdir (15 saniye).

Ayrıca, zaman aşımı değerini olarak ayarlayarak, 0bağlanma girişiminizin sonsuz bir süre bekleyeceğini belirtmiş olursunuz. Belgelerde açıklandığı gibi bu, bağlantı dizenizde ayarlamamanız gereken bir şeydir:

0 değeri sınır olmadığını gösterir ve bir ConnectionString'de kaçınılmalıdır çünkü bağlanma girişimi süresiz olarak beklemektedir.


Buna örnek verebilir misiniz? EF6 kullanıyorum ve tablomda 3 milyon veri var, bazı işlem programları yaptığımda zaman aşımı hatası
veriyor

4
@saulyasar Bu, COMMAND zaman aşımı değil, BAĞLANTI zaman aşımıdır. BAĞLANTI zaman aşımı, sql sunucusuna ne kadar süreyle BAĞLANmaya çalışacağı ile ilgilidir. Bir yordamın veya ifadenin zaman aşımına uğramadan önce ne kadar süre çalışacağını belirten COMMAND zaman aşımını araştırmak istiyorsunuz.
granadaCoder

32

Hmmm ...

Darin'in dediği gibi, daha yüksek bir bağlantı zaman aşımı değeri belirleyebilirsiniz, ancak sorunun gerçekten bu olduğundan şüpheliyim.

Bağlantı zaman aşımına uğradığınızda, bu genellikle aşağıdakilerden biriyle ilgili bir sorundur:

  1. Ağ yapılandırması - web sunucunuz / geliştirici kutunuz ve SQL sunucusu arasındaki yavaş bağlantı. Zaman aşımını artırmak bunu düzeltebilir, ancak altta yatan sorunu araştırmak akıllıca olacaktır.

  2. Bağlantı dizisi. Yanlış bir kullanıcı adı / şifrenin bir nedenle "erişim reddedildi" şeklinde gerçek bir hata yerine zaman aşımı hatası vermesine neden olan sorunlar gördüm. Bu olmamalı ama hayat böyle.

  3. Bağlantı Dizesi 2: Sunucunun adını yanlış veya eksik (örneğin mysqlserveryerine mysqlserver.webdomain.com) belirliyorsanız, bir zaman aşımı alırsınız. Sunucu adını tam olarak komut satırındaki bağlantı dizesinde belirtildiği şekilde kullanarak sunucuya ping atabilir misiniz ?

  4. Bağlantı dizesi 3: Sunucu adı DNS'nizde (veya ana bilgisayar dosyanızda), ancak yanlış veya erişilemez bir IP'yi gösteriyorsa, makine bulunamadı-ish hatası yerine bir zaman aşımı alırsınız.

  5. Aradığınız sorgu zaman aşımına uğruyor. Sorun sunucuya bağlantı gibi görünebilir, ancak uygulamanızın nasıl yapılandırıldığına bağlı olarak, zaman aşımı gerçekleşmeden önce sorgunuzun yürütüldüğü aşamaya kadar tüm yolu yapıyor olabilirsiniz.

  6. Bağlantı sızıntıları. Kaç işlem çalışıyor? Kaç açık bağlantı var? Ham ADO.NET'in bağlantı havuzu oluşturup oluşturmadığından, gerekli olduğunda bağlantıları otomatik olarak kapattığından veya tüm bunların nerede yapılandırıldığından emin değilim. Bu muhtemelen kırmızı ringa balığı. WCF ve web hizmetleriyle çalışırken, kapatılmamış bağlantılarla ilgili zaman aşımlarına ve diğer öngörülemeyen davranışlara neden olan sorunlar yaşadım.

Denenecek şeyler:

  1. SQL Management Studio ile sunucuya bağlanırken zaman aşımı oluyor mu? Öyleyse, sorun büyük olasılıkla ağ yapılandırmasıdır. Management Studio ile bağlanırken bir sorun görmüyorsanız, sorun sunucudaki değil uygulamanızda olacaktır.

  2. SQL Profiler'ı çalıştırın ve kabloda gerçekte neler olduğunu görün. Gerçekten bağlanıp bağlanmadığınızı veya sorunun bir sorgu olup olmadığını anlayabilmelisiniz.

  3. Sorgunuzu Management Studio'da çalıştırın ve ne kadar sürdüğünü görün.

İyi şanslar!


Sorgunuz zaman aşımına uğruyorsa, sanırım bir komut zaman aşımı alacaksınız
user55474

@ user55474 muhtemelen; nasıl çağrıldığına bağlıdır ( çok nadiren).
3

Bu msdn blog gönderisine göre değil: blogs.msdn.com/b/spike/archive/2008/07/31/…
tom redfern

@Her ne kadar nadir olduğunu söylediğime inanıyorum, ama ilk elden gördüm.
3Dave

1
"SQL Profiler'ı Çalıştır" için +1. Görünüşe göre karmaşık olacak ama aslında sadece "Araçlar> SQL Server Profiler" ı tıklayın ve uygulamanızın SQL Server'a ne söylediğini izleyin. Benimki Seçenek # 5 idi :)
Andrew Kvochick

11

Dinamik olarak değiştirmek istiyorsanız, SqlConnectionStringBuilder kullanmayı tercih ederim .

ConnectionString'i yani bir dizeyi Object sınıfına dönüştürmenize izin verir, Tüm bağlantı dizesi özellikleri onun Üyesi olacaktır.

Bu durumda gerçek avantaj, ConnectionTimeout dizesi parçası bağlantı dizesinde zaten mevcut olup olmadığı konusunda endişelenmenize gerek olmamasıdır.

Ayrıca bir Nesne oluşturduğundan ve dizeyi değiştirmek yerine nesneye değer atamak her zaman iyidir.

İşte kod örneği:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

2
ConnectionTimeoutMülkün SqlConnectionsalt okunur tipte yapılmasının iyi bir fikir olduğuna inanamıyorum .
Maslow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.