![SQL Server 查询运行时间超过 IIS 7.5 中设置的超时值以及 SQL Server 查询超时](https://linux22.com/image/804125/SQL%20Server%20%E6%9F%A5%E8%AF%A2%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%E8%B6%85%E8%BF%87%20IIS%207.5%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E7%9A%84%E8%B6%85%E6%97%B6%E5%80%BC%E4%BB%A5%E5%8F%8A%20SQL%20Server%20%E6%9F%A5%E8%AF%A2%E8%B6%85%E6%97%B6.png)
SQL 服务器在执行查询或存储过程时会考虑哪个超时值?应用程序超时设置为 20 分钟。SQL 查询/命令超时设置为 10 分钟。然后 F5(负载平衡器)超时设置为 5 分钟。即使请求超时,SQL 查询仍会继续运行大约 40-50 分钟,绕过所有超时值。之后必须有人终止查询。这些长时间运行的查询实际上会破坏我们的系统性能并填满 SQL Server DB 事务日志文件。
答案1
SQL Server 默认不强制执行任何类型的查询超时。查询可以永远运行下去。
通常,客户端超时值仅仅意味着客户端将放弃并返回错误。客户端可能已丢失与数据库服务器的所有连接,尝试自行清理很可能是徒劳的。在客户端确实尝试终止查询的情况下,您可能会遇到回滚查询所做的工作可能需要很长时间的情况。这通常被解释为查询“仍在运行”。这只会在您修改数据(INSERT、UPDATE、DELETE)或运行使用 tempdb 的某种大型聚合时发生。
对于 IIS 页面来说,10 分钟是很长的时间。
我会首先查找连接之间的阻塞。在某些情况下,删除一行的删除语句可能会阻塞表上的任何选择。您应该能够在这里找到有关 ServerFault 的问题来帮助您做到这一点。
我建议检查您的查询、表、索引和索引维护,以确保一切都遵循最佳实践。这是一个很大的话题,但 ServerFault 和几乎所有 SQL Server 管理网站上都有资源可以帮助您。
答案2
您的命令超时可能向服务器发出了 Attention 事件信号。您可以使用数据包捕获或 SQL 事件探查器跟踪来验证这一点。Attention 事件通常会导致 SQL 服务器中止正在进行的任何活动。
但是,如果您发出 Attention 事件信号,这并不总是很有效。您可能想尝试将 XACT_ABORT 设置为默认连接值,或者修改现有代码以使用 XACT_ABORT。