提问人:sooprise 提问时间:4/28/2011 更新时间:9/23/2022 访问量:8198
如果查询超时,会发生什么情况?
What Happens To a Query If It Times Out?
问:
假设我有一个发送到我的 SQL-Server 数据库的查询,它花费了 30 多秒的时间,并且我的程序引发了 SQL 查询超时异常。查询是否仍在我的数据库上运行,还是在引发异常后立即终止?
答:
如果遇到 SQL 超时,则 SQL 已停止,但 Web 应用程序可能会超时,SQL 查询可以继续。
在执行查询之前,SQL Server 估计它需要多少内存 运行并尝试保留此金额 缓冲池中的内存。如果 reservation 成功查询是 立即执行。如果没有 有足够的内存随时可用 缓冲池,然后将查询放入 放入具有超时值的队列中, 其中超时值由 查询成本。基本规则是: 估计成本越高,越大 超时值为。当 此查询的等待时间超过 timeout 值,则超时错误为 抛出,查询将从 队列。
评论
通常,当它超时时,这意味着连接已终止,这意味着查询尚未发送到数据库,大多数数据库都支持事务,您可以在其中启动事务,运行查询,如果您满意,可以提交它们。
例:
BEGIN TRAN
UPDATE authors
SET au_fname = 'John'
WHERE au_id = '172-32-1176'
UPDATE authors
SET au_fname = 'Marg'
WHERE au_id = '213-46-8915'
COMMIT TRAN
评论
客户端向以下对象发出查询超时信号 使用注意事件的服务器。 注意力事件只是一个 不同类型的 TDS 数据包 SQL 服务器客户端可以发送给它。在 除了连接/断开连接之外,T-SQL 批处理和 RPC 事件,客户端可以 发出注意服务器的信号。一 注意告诉服务器取消 连接当前正在执行 查询(如果有的话)尽快 可能。注意不会 回滚打开的事务,以及 不会停止当前正在执行的 一角钱查询 -- 服务器中止 无论它为什么 连接在下一个可用 机会。通常,会发生这种情况 很快,但并非总是如此。
当客户端确定命令运行时间足够长时,它会发出“中止”。查询只是在数据库中停止运行。
任何 CATCH 块都不会被击中,交易将保持打开状态,并且在此之后仍然可以保持锁定状态,即使连接关闭,因为“关闭”意味着“返回连接池”。
如果您预计会有很多命令超时,请考虑使用 SET XACT_ABORT ON(这也是),这将释放锁定和回滚事务。或修复代码...
评论