2009-08-20 150 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分钟,并且您可能会耗尽端口,这就是您在高峰时间看到此端口的原因。

这是如果你错误是一个传输级别的错误。