当超出SQL_ATTR_QUERY_TIMEOUT时,SQL Server是否会停止工作?

时间:2012-12-14 18:16:12

标签: sql-server timeout odbc

使用ODBC从客户端调用SQL Server时,如果运行长时间运行的查询导致超出SQL_ATTR_QUERY_TIMEOUT中指定的时间,我会看到控件返回给应用程序。我的问题是SQL Server引擎中的工作是否继续。如果它继续可以做什么来中止/取消/停止服务器上的请求?是否需要考虑最佳实践考虑因素?

1 个答案:

答案 0 :(得分:2)

客户端向服务器发送Attention信号:

  

客户端可以通过发送注意消息来中断和取消当前请求。这也称为带外数据,但是当前发送的任何TDS数据包必须在发送注意消息之前完成。客户端发送注意消息后,客户端必须读取,直到收到注意确认。

引擎将在第一时间中止batch(出于所有实际原因,立即)并发送回Attention ack。在某些州,批次不能被中断,例如。回滚交易时。在这种情况下,客户端可能会请求中止,但只有在服务器终止不可中断的工作后才会响应。

以上情况适用于任何SQL Server客户端堆栈,例如。 SqlCommand.CommandTimeout的工作方式完全相同。

KILL命令以非常类似的方式工作,除了它不是客户端 - 服务器通信,但是kill-SPID - >受害者 - SPID通信。