【问题标题】:SQL Server Agent - Semaphore timeoutSQL Server 代理 - 信号量超时
【发布时间】: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


【解决方案1】:

我会按照以下步骤来解决这个问题...

1.确保查询已微调
2.确保统计数据和索引是最新的

信号量超时主要与系统内存不足有关。所以更新统计信息将有助于 sql server 正确估计内存。这应该可以解决大部分超时

但是由于作业是在本地服务器上执行的

我假设您的意思是,您正在与服务器相同的盒子中运行作业..不是远程..即使在这种情况下,我们也面临超时(一般),但我们通过以下步骤排除了硬件和网络问题

TCP Offloading/Chimney & RSS…What is it and should I disable it?

更改了远程登录,远程查询超时(这些可能不适用于您的错误消息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2011-11-05
    • 2014-04-13
    • 1970-01-01
    • 2010-10-07
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多