等待服务代理消息的性能影响

Ang*_*ker 7 performance sql-server-2005 sql-server service-broker

我有一种情况,多个客户端应用程序通过 Service Broker(使用存储的 procs)发送消息。这些消息由另一个客户端应用程序获取,然后进行处理。获取消息的方式是应用发出以下 SQL 语句(伪代码):

LOOP {
    WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM SB_ReceiveQ)
    ProcessMessage
}
Run Code Online (Sandbox Code Playgroud)

所以基本上代码只是阻塞,直到收到消息。这一切正常。

我的问题是关于发出一个WAITFOR (RECEIVE...命令的含义,该命令基本上永远挂在一些基于服务代理的资源上。我应该了解与此模式相关的任何性能问题吗?

作为参考,这是 SQL Server 2005。

Rem*_*anu 7

您正在阻止 SQL Server 中的工作人员,并且工作人员受到限制,受max worker threads 的限制。这意味着不应该有成千上万的请求被阻塞,WAITFOR(RECEIVE...)否则你会饿死工作服务器。

但首先想到的问题是为什么不利用 Service Broker Activation?这样您就不会一直等待,而只是在激活时等待,因为有消息要接收。