SQL Server Broker 服务排队很慢

SQL Server Broker Service is slow to enqueue

我想弄清楚为什么我的 SSBS 实例的消息排队速度如此之慢。

我正在使用 ado.net 从 C# 应用程序进行连接。排队大约 720 条消息需要 5-6 秒。

我将消息分成 50 个消息块,每个块都进行自己的对话。

我正在使用“150 技巧”来确保每个对话句柄都在其数据页面上,以避免热点对话行。使用 .net TPL 并行执行块。

每个块(50 条消息)获取自己的 Sql连接,没有事务,开始一个对话(实际上是 150 个对话,但只使用一个),按顺序发送消息(通过 foreach 循环),然后结束对话。

SSBS 服务的定义没有验证或加密。

客户端应用程序(发送消息)和 Sql 服务器实例都安装在同一台机器上,并托管在 SSD、32 GB Ram、i7 处理器上。在此期间我没有看到资源用尽。

作为性能不佳的原因,我还应该查看什么?

你提到了“150”技巧,所以你已经阅读了白皮书(供其他人参考,可以找到here)。同一份白皮书的另一个观察结果是,建立对话有些昂贵。您是否测量过对话设置花费的时间(与实际发送消息相比)?

我在此处实施 SB 时所做的一件事是,我设置了一个 table 应用程序可以在 运行 时间获取的预启动对话句柄。它们(从功能上讲)永远存在 如果您对细节感兴趣,请告诉我,我可以 post 在这里。

天哪,我觉得我很愚蠢。

我花了一整天的时间试图找出缓慢的原因。结果是 Visual Studio 的 Intellitrace 调试器。当我 运行 我的代码没有附加调试器时,我得到以下结果:

[17:56:25 DBG] Creating Conversation took 0001 millisecond(s)
[17:56:25 DBG] Sending 718 message(s) to broker service message queue.  took 0208 millisecond(s)

向所有为这次狙击狩猎做出贡献的人表示歉意和感谢。