2010-06-22 13 views
7

Şu an bir süredir bu sorunu görüyoruz ve gerçekten de başıma neyin sebep olduğunu etrafımda sarmaya çalışıyorum.Klasik ASP uygulaması SQL Server "Zaman Aşımları" ve "SQL Server yok veya erişim reddedildi" sorunu yaşanıyor

biz web sayfaları atma başlar dönemlerini görürsünüz günde sonra kısa süre sonra sayfalar [Microsoft] [ODBC SQL Server sürücüsü] [" atarım "[Microsoft] [ODBC SQL Server sürücüsü] Zaman aşımı doldu" Birkaç kez DBNETLIB] SQL Server yok veya erişim reddedildi. "

Bu veritabanı sunucusuna bağlanan birçok farklı uygulamamız var. Saniyede ortalama 10.000 işlem gerçekleştiren yaklaşık 2500 eşzamanlı bağlantı işlemektedir. Uygulamalarımızın çoğunda sorun yok, sorunlar sadece web sunucusunda oluyor gibi görünüyor. (Belki de bağlantı havuzu ile ilgilidir?)

Bu sorunun ne olacağından emin değilim. Söz konusu SQL sunucusu, yaptığı iş için büyük ölçüde etkindir ve işlemci başına lisanslama ile donatılmıştır. Bu yüzden bir lisans/performans sorununa baktığımızı düşünmüyorum.

Belki de bir IP bağlantısı sorunu olduğunu düşündüm, bu yüzden IP adresini kullanmak için ConnectionString'i değiştirdim ve uzun süreli ping'leri çalıştırdım. Web sunucusu ve veritabanı sunucusu arasında 0 paket kaybettim.

ASP bağlantı dizesi şimdi şöyle görünür:

Provider=MSDASQL; Driver={SQL Server}; Server=10.0.100.100; Database=DBName; UID=WebUserName; PWD=WebUserPassword; ConnectionTimeout=15; CommandTimeout=120; 

kullanıcı SQL Server kimlik doğrulaması kullanarak bağlantı olmayan bir etki alanı kullanıcısı olduğunu. Yani bunun alanla ilgili bir sorun olduğunu düşünmüyorum. SQL server log dosyalarını kontrol ettim ve olaylara karşılık gelen hiçbir şey bulamadım.

Benzer davranışıtan, çözünürlüğü belirtmeden another stackoverflow question anladım.

Detayları:

  • Web Sunucusu: Windows 2003 Standart SP2, 6.
  • Veritabanı Sunucusu IIS: Microsoft SQL Server 9.0.4035

    herkes gördü

/Bu çözüldü tip sorunu Bir daha nereye bakmam gerektiği konusunda herhangi bir önerisi var mı?

Teşekkürler!

-Zorlack

DÜZENLEME

herkes iyi uygulama klasik yüksek yük asp sql sorguları gerçekleştirmek için ne olduğunu bana söyleyebilir misiniz? Bağlantı havuzundan yararlanmayı denemek ister miyiz? kodunda baktığımızda

, oldukça çok şuna benzer: (Scotte tavsiyesine başına)

Set objCn = Server.CreateObject("ADODB.Connection") 
objCn.Open(Application("RoConnStr")) 
'do some stuff 
objCn.Close 
Set objCn = Nothing 

Çözüm açıklanan

This article, bir tişört, sorunuma. Kayıt defterini değiştirdim ve sunucuyu yeniden başlattım.

Sorun Çözüldü!

+0

Teşekkürler, ben de bu problemi yaşadım. Bağlantı havuzu gibi görünüyor olsa kırmızı bir ringa balığı. Bağlantı havuzu açıkken ve bağlanmadan test yaptığımda, sunucu hala TIME_WAIT durumunda binlerce TCP bağlantısı oluşturdu. Bağlantı havuzu, bağlantı nesnelerini yeniden kullanmanıza izin veriyor gibi görünüyor, ancak bunlar bazen sunucular arasında birçok yeni TCP bağlantısı oluşturur. –

cevap

7

Web uygulamanızın veritabanı bağlantılarının kapanması ve imha edilmesi (hiç bir şey yok) mu?

Ayrıca, ODBC yerine SQLOLEDB kullanmayı denediniz mi? Burada ODBC'yi kullanmanın nedenini düşünemiyorum.

burada çok yoğun bir klasik asp uygulaması üzerinde benim bağlantı dizesi var:

Dim strcConn 
strConn = "Provider=SQLOLEDB; Data Source=someserver; Initial Catalog=somedb; User ID=someuserid; Password=somepassword" 

Düzenleme

ben bu blog gönderme geldi. İlginç bir şey. Böyle sorunlar vardı

http://www.ryanbutcher.com/2006/02/classic-asp-on-2003-server-with.html

+1

Bakacağım iki şey bunlar: ODBC bağlantıya gereksiz soyutlama ekler ve bağlantıların geri alınamaması yaygın bir sorundur. – Godeke

+0

Çoğu zaman uygulama bitince bağlantı nesnesini hiçbir şey olarak ayarlamaz. Anladığım kadarıyla, bağlantı nesnesi etrafından ayrılmak, sayfanın işlenmesi bittiğinde kapsam dışına çıkılacağından emin olmaktı. Bu noktada bağlantı havuzu devralmaz mı? – zorlack

+0

Yukarıdaki düzenlemeye bakın: – zorlack

0

kez her zaman birisi bir 'seçmek ..' deyimi uygulanıyor olmadan istemci uygulamasında açık verileri tutan etmek zorunda kaldı.

Sorununuz burada çözülüp çözülmediğini bilmiyoruz.

2

Kayıtlı yordamı yeniden oluşturarak bu sorunu çözdüm!
Sadece DROP ve CREATE arasındaki basit bir hata durumumdaki zaman aşımlarını durdurdu!

Bu problemi bir hafta boyunca yaşadım; Bir klasik ASP, "SQL zaman aşımı" dediğimde, aynı sorguyu veritabanından bir saniyeden daha kısa sürede çalıştırabiliyordum. (Ancak "yok" mesajı görmedim.) ASP bir ay boyunca iyi çalışıyordu.

Benim bir deha arkadaşı çok etkili olmayan bir 'önbelleğe' yürütme planını kullanır ASP geçiyor" dedi. Daha bunu yapmak için yeniden yazı ile yapabilirdi. Bu saklı yordam öneriyorsun bırakarak ve yeniden deneyin Verimli, tekrar olabileceği gibi. " SQL Management Studio ile test edildiğinde proc ince koşuyordu yana

, bunu önbelleğe planı kullanılan gelmez varsayalım, ancak ASP yapar.

+0

Bu upvotes ihtiyacı çok çok iyi bir cevap! ASP ile yıllarca çalıştım ve bu soruna hiç isabet etmedim (şükürler olsun, prosedürlerim hiç sorun yaratmadı) ama akılda tutulması gereken çok iyi bir bilgi! Teşekkürler! – Digs

+0

Önbelleğe alınan plan sorunsa, önbelleğe alınmış planı yeniden değerlendirmek için SQL komutunu vererek daha az kesinti ile bu sorunu çözebilirsiniz: "sp_recompile 'MyProcedure'ı çalıştır" Bu, beklenmeyen değişiklik izinleriyle ilgili sorunları önler. – Bruce