我之前下载了数百万条记录,没有遇到任何超时。但是,在添加 WHERE 子句将下载限制为仅几千条记录后,我经常面临超时。这让我有些困惑,并质疑我对如何应用超时的理解。
如果 30 秒后 SQL Server 仍在传输数据,是否会发生超时?
这种行为差异肯定是由于当前执行计划表现不佳造成的,还是有其他解释?我这样问是因为如果没有 WHERE 子句,数据会立即开始流式传输,但使用 WHERE 子句显然不会发生这种情况。
如果 30 秒后 SQL Server 仍在传输数据,是否会发生超时?
对于 SQL Server
此属性是命令执行或结果处理期间所有网络读取的累积超时(对于方法调用期间读取的所有网络数据包)。返回第一行后仍然可能发生超时,并且不包括用户处理时间,仅包括网络读取时间。
因此 CommandTimeout 仅在等待服务器结果时运行。 如果服务器连续传输结果,则 CommandTimeout 在 30 秒后不会触发。