设置连接超时是否也会终止服务器端的查询?

时间:2013-05-29 01:55:56

标签: sql sql-server sql-server-2008 timeout

我有一些代码查询后端SQL Server:

using (SqlConnection con = new SqlConnection(connString))
{
    SqlDataReader dr;
    SqlCommand cmd;
    cmd = new SqlCommand("PROC1", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = 300;

    try 
    {
       con.Open();
       dr = cmd.ExecuteReader();

       while(dr.Read()) 
       {
          // ...
       }
    }
    catch (SqlException e) 
    {
       // Some logging
    }
    catch (Exception e)
    {
       // Some logging
    }
}

一旦超时发生,我预计连接将被关闭,未完成的查询将被终止。我正面临tempdb大小不变或增加的问题。因为有许多其他进程访问同一台服务器,所以我想确保我不会导致这种情况发生。

当发生查询超时时,我是否可以期望SQL Server在服务器端清理并正确杀死未完成的查询,还是应该从我这边做更多的事情?

1 个答案:

答案 0 :(得分:2)

当您在服务器上运行任何代码时,客户端保持连接状态并等待来自服务器的重新分配。

超时 - 客户端在从客户端关闭连接之前等待服务器响应的最长时间。因此,服务器上的代码会一直运行,直到完成或失败(例如,tempDB溢出错误)。

因此,默认情况下,您不能指望事务在超时时终止。