对 Service Broker 的性能影响 WAITFOR RECEIVE with no TIMEOUT

Performance Impact on Service Broker WAITFOR RECEIVE with no TIMEOUT

没有超时的 WAITFOR RECEIVE 对性能有何影响?

我们构建了一个 .Net 服务,用于从我们的 SQL Server Service Broker 队列接收消息,然后将消息发送到 ActiveMQ。

不是让服务每 5 秒轮询一次 SQL Server Service Broker 队列,如果我们在队列上执行 WAITFOR RECEIVE 且没有超时,那么对性能有何影响?

来自 RECEIVE 上的文档:

The statement waits until at least one message becomes available then returns a result set that contains all message columns.

会发生的是 WAITFOR RECEIVE 将暂停并等待消息进来,并且只有 return 当消息确实进来时才会发生。如果它永远不会,它将永远坐在那里.

这不会消耗服务器资源(占用侦听器除外),但如果不经常收到消息,则很难终止发出调用的程序。 TIMEOUT 子句的好处在于,它为您的应用程序提供了一种定期检查是否有人请求程序终止的方法。如果没有 return 控制调用线程并让它检查是否应该自行退出的超时,您唯一的选择就是从外部强行终止线程。

与无限期保持调用相比,每 5 秒循环一次调用对服务器的影响差异小到无法衡量。