【发布时间】:2017-04-12 09:50:21
【问题描述】:
我有一个包含一步的 SQL Server 代理作业。该步骤在本地服务器上执行存储过程,仅此而已。当作业执行(手动或计划)时,我收到以下错误。该作业在大约 23 秒后失败。
Msg 121, Level 20, State 0, Line 0 从服务器接收结果时发生。 (提供者:TCP 提供者,错误:0 - 信号量超时期限已过。)
但是,我手动执行存储过程没有问题。我会在不到一秒的时间内收到正确的结果。
“信号量”错误往往是硬件或网络问题。但由于作业是在本地服务器上执行的,我不清楚硬件或网络延迟如何成为问题。
更新(我尝试过的事情)
每次尝试后,我都会将所有内容恢复到原始状态。这些尝试中的每一个都有相同的结果(当我 RDP 到服务器时有效,在其他任何地方都失败)。
- 底层存储过程调用链接服务器。我删除了这些引用。
- 假设问题是对 AD 域控制器的某种调用,我使用 SQL 登录而不是 Windows 用户。
- 我将作业修改为像我一样运行(因为我可以做任何事情)。
另一个注意事项:执行时,作业无法启动。因此,它甚至没有进入存储过程。
【问题讨论】:
-
您计划以哪个用户身份运行作业?有时这对于用户权利问题是误报。
-
我已经仔细检查了用户权限 - 不是这样。
-
事实上,如果我 RDP 进入服务器,并从那里手动执行作业,它就可以工作。用户是 Windows 用户(不是 SQL 登录),我们正在使用 AD。
-
但是,其他工作也可以。这些其他作业执行存储过程并使用相同的 Windows 用户。
-
给您的数据点:TCP 3 次握手限制为 21 秒。这听起来很接近您观察到的 23 秒超时。
标签: sql-server semaphore