SQL服务器超时问题

时间:2009-08-20 12:31:27

标签: asp.net sql-server asp-classic

  

可能重复:
  SQL server timeout

嗨,我的应用程序是在经典的asp上开发的,但是当我在.Net上迁移应用程序时也使用asp.net。它使用SQL服务器作为数据库并托管在Windows Server 2003上。

现在的问题是应用程序在很长一段时间内继续完美运行,但是经过一段时间SQL Server发出超时错误并且它可以完成任何请求。即使我重新启动SQL服务器甚至IIS,它也无法修复,最终我每次都必须重新启动服务器才能解决问题。

知道可能导致问题的原因是什么?为了给出一个好主意,该网站在高峰时段被大约300人使用。

知道可能导致问题的原因是什么?为了给出一个好主意,该网站在高峰时段被大约300人使用。我特意在各处关闭连接,每个页面上的结束代码都会关闭连接。如果在结束页面之前发生错误,则预期处理程序将关闭连接。所以我确信关闭连接不是问题。如果我看到sql日志,那就没有打开连接。我们的服务器只有一个盒子,有SQL Server,IIS,iMail(我们的邮件服务器)。我重新启动SQL Server后,它没有解决问题。只有重新启动Windows Server才有效。从perfom,IO使用率非常高。有什么建议吗?

谢谢,wildanjel

3 个答案:

答案 0 :(得分:0)

您使用的是SQL 2000/2005/2008吗?

添加.NET代码后,此问题是否开始发生?

当我第一次开始使用ASP.NET和SQL Server时,有一件事让我确信我关闭并处理了我正在使用的任何数据加载器。

答案 1 :(得分:0)

要做的主要是确保在ADO.NET中关闭并处理连接。您的问题的一种可能性可能是您在使用它们之后没有关联。与Classic 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();

    }
}

即使抛出异常,Using命令也可确保关闭和处理连接。对于命令对象也是如此。

答案 2 :(得分:0)

您是否在连接字符串中使用连接池?

如果不是,请查看此answer。您需要使用连接池,因为即使您关闭连接,端口仍然在使用4分钟,并且您可能会耗尽端口,这就是您在高峰时间看到这一点的原因。

如果您的错误是传输级别错误。