2009-08-20 147 views
0

可能重複:
SQL server timeoutSQL服務器超時問題

嗨,我的應用程序是在傳統的ASP開發的,但也使用asp.net,因爲我遷移在.NET上的應用。它使用SQL服務器作爲數據庫,並託管在Windows Server 2003上。

現在的問題是應用程序長時間繼續工作得很好,但過了一段時間後,SQL Server發出超時錯誤,它可以滿足任何請求。即使重新啓動我的SQL服務器甚至IIS時,它也不會得到修復,但最終我必須重新啓動服務器,每次只修復問題。

任何想法可能導致這個問題?爲了給出一個明智的想法,該網站在高峯時段被大約300人使用。

任何想法可能導致這個問題?爲了給出一個明智的想法,該網站在高峯時段被大約300人使用。我確實關閉了連接,每個頁面上的結束代碼都會關閉連接。如果在結束頁面之前發生錯誤,則預期處理程序將關閉連接。所以我確信關閉連接不是問題。如果我看到sql日誌,那就沒有開放連接。我們的服務器,只有一個盒子,有SQL Server,IIS,iMail(我們的郵件服務器)。在我重新啓動SQL Server之後,它沒有解決問題。只有重新啓動Windows Server,它工作。從性能來看,IO的使用率非常高。有什麼建議嗎?

謝謝,wildanjel

+1

確切的重複:http://stackoverflow.com/questions/1301148/sql-server-timeout – 2009-08-20 12:35:24

+0

從服務器重新啓動到超時開始需要多長時間? – DmitryK 2009-08-20 12:51:17

回答

0

您是否正在使用SQL 2000/2005/2008?

在添加.NET代碼後是否發生此問題?

當我第一次開始使用ASP.NET和SQL Server時,有一件事讓我感到遺憾,那就是確保我關閉並處理了我正在使用的任何數據讀取器。

0

要做的主要事情是確保關閉並處理ADO.NET中的連接。你的問題的一種可能性可能是你在使用它們後沒有建立連接。與傳統ASP不同,您應該儘可能晚地打開連接並儘快關閉它。最好的方法是使用C#中的Using語法。例如:

using (SqlConnection conn = new SqlConnection(Settings.ConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand("dbo.UpdateHits", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@PageID", SqlDbType.Int)).Value = 1; 

     conn.Open(); 
     cmd.ExecuteNonQuery(); 

    } 
} 

即使發生異常,使用命令可確保連接關閉並處置掉。命令對象相同。

0

你在連接字符串中使用連接池嗎?

如果您不是,請參閱此answer。您需要使用連接池,因爲即使關閉連接,端口仍處於使用狀態4分鐘,並且您可能會耗盡端口,這就是您在高峯時間看到此端口的原因。

這是如果你錯誤是一個傳輸級別的錯誤。