在 T-SQL 中设置查询超时
Set query timeout in T-SQL
我正在从一个应用程序向 SQL 服务器执行查询。有时其中一个查询会持续很长时间。实际上太长了,它通常表明它最终会失败。我想指定一个最长持续时间,在此之后查询应该会失败。
有没有办法在 T-SQL 中指定命令超时 ?
我知道可以在连接字符串中设置(连接和)命令超时。但是在这个应用程序中我无法控制连接字符串。即使我可以,其他查询也应该更长。
据我所知,您不能限制查询时间,除非在连接字符串中指定(您不能这样做)或者如果查询是通过链接服务器执行的。
您的 DBA 可以为链接服务器和查询设置超时,但直接查询不允许您自己这样做。我会有更大的问题是为什么查询失败?服务器上是否已经存在预设超时(希望如此),您是否 运行 内存和分页不足,或者任何一百万个其他原因。你有DBA吗?因为如果我的一台服务器被这样糟糕的代码攻击,我会联系执行它的人。如果他没有,您应该联系并寻求帮助确定失败原因。
如果异常长的持续时间恰好是由于(本地)锁造成的,是一种突破它的方法。在 运行 查询之前设置锁定超时:
SET LOCK_TIMEOUT 600000 -- Wait 10 minutes max to get the lock.
之后不要忘记将其设置回去,以防止后续对连接的查询超时:
SET LOCK_TIMEOUT -1 -- Wait indefinitely again.
我正在从一个应用程序向 SQL 服务器执行查询。有时其中一个查询会持续很长时间。实际上太长了,它通常表明它最终会失败。我想指定一个最长持续时间,在此之后查询应该会失败。
有没有办法在 T-SQL 中指定命令超时 ?
我知道可以在连接字符串中设置(连接和)命令超时。但是在这个应用程序中我无法控制连接字符串。即使我可以,其他查询也应该更长。
据我所知,您不能限制查询时间,除非在连接字符串中指定(您不能这样做)或者如果查询是通过链接服务器执行的。
您的 DBA 可以为链接服务器和查询设置超时,但直接查询不允许您自己这样做。我会有更大的问题是为什么查询失败?服务器上是否已经存在预设超时(希望如此),您是否 运行 内存和分页不足,或者任何一百万个其他原因。你有DBA吗?因为如果我的一台服务器被这样糟糕的代码攻击,我会联系执行它的人。如果他没有,您应该联系并寻求帮助确定失败原因。
如果异常长的持续时间恰好是由于(本地)锁造成的,是一种突破它的方法。在 运行 查询之前设置锁定超时:
SET LOCK_TIMEOUT 600000 -- Wait 10 minutes max to get the lock.
之后不要忘记将其设置回去,以防止后续对连接的查询超时:
SET LOCK_TIMEOUT -1 -- Wait indefinitely again.