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)
向所有为这次狙击狩猎做出贡献的人表示歉意和感谢。
我想弄清楚为什么我的 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)
向所有为这次狙击狩猎做出贡献的人表示歉意和感谢。