如果查询超时会发生什么

本文关键字:什么 查询 超时 如果 | 更新日期: 2023-09-27 17:53:13

假设我有一个查询被发送到我的SQL- server数据库,它需要超过30秒,并且我的程序抛出一个SQL查询超时异常。查询是否仍然在我的数据库上运行,还是在抛出异常时立即终止?

如果查询超时会发生什么

客户端发送查询超时信号给服务器使用注意事件。注意力事件只是一个不同类型的TDS数据包的SQL服务器客户端可以发送给它。在除了连接/断开,T-SQL批处理和RPC事件,客户端可以向服务器发出注意信号。一个注意通知服务器取消连接正在执行查询(如果有的话)可能的。注意力不会回滚打开的事务,它不会停止当前正在执行的即时查询——服务器中止不管它在做什么下一个可用的连接的机会。通常会发生这种情况非常快,但不总是这样。

当客户端决定命令已经运行足够长的时间时,它发出"Abort"。查询将在数据库中停止运行。

任何CATCH块都不会被命中,事务将保持打开状态,并且在此之后锁仍然可以保持分配,即使连接关闭,因为"关闭"意味着"返回连接池"。

如果您期望大量的命令超时,那么考虑使用SET XACT_ABORT ON(以及这个),释放锁和回滚事务。或者修改代码…

执行查询前,SQL Server估计需要多少内存运行并尝试保留此金额缓冲池中的内存。如果预订成功,查询为立即执行。如果没有足够的内存随时可用缓冲池,然后放入查询到具有超时值的队列中,其中超时值由查询开销。基本规则是:估计成本越高,成本越大超时值为。的时候此查询的等待时间超过超时值,超时错误为抛出并从中删除查询队列。

如果你得到一个SQL超时,那么SQL已经停止,但是web应用程序可以超时,SQL查询可以继续。

通常当它超时时,这意味着连接已经死亡,这意味着查询还没有被发送到数据库,大多数数据库支持事务,你可以启动一个事务,运行你的查询,如果你高兴的话,你可以提交它们。

的例子:

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