有人能告诉我这个场景是否需要SQL Server Service Broker?

时间:2014-05-29 17:57:43

标签: sql-server msmq service-broker

关于堆栈溢出的第一个问题所以请放心。我有一个长时间运行的Windows应用程序,它不断处理sql server命令。我还有一个Web前端,用户偶尔会使用它来更新同一个数据库。我注意到有时(取决于Windows应用程序当时正在处理的内容)如果用户向db提交内容,我会在服务器上收到内存不足异常。我意识到我需要更多地挖掘并优化代码。但是我无法承受服务器的功能,并希望将来我会在前端允许越来越多的用户。我真正需要的是一个系统,它将对用户请求进行排队(它们不是时间关键)并在数据库准备就绪时处理它们。

我正在使用SQL 2012 express。

SQL Service Broker是最好的解决方案,我也研究过MSMQ。

如果是这样,有人能指出我正确的方向,我会很感激。在我的搜索中,我只是发现了很多我认为不需要的东西。

干杯

1 个答案:

答案 0 :(得分:0)

这取决于您执行持久性工作和/或计算的位置。如果您在Windows应用程序中进行了艰苦的工作,那么使用Service Broker队列是不值得的,因为您将要做的就是从Windows应用程序中的Service Broker队列接收消息,您的计算和/或来自Windows应用程序的查询,然后将结果保存到数据库:由于您的数据库已经处于内存压力下,这似乎是一个不必要的额外负载,因为您可以轻松地从MSMQ排队和检索消息(或任何其他queueing technology)。

但是,如果您正在进行数据库中的所有工作,并且您的Windows应用程序只是充当编组服务 - 例如接收请求并将其关闭到存储过程以进行操作 - 那么Service Broker队列可能值得使用:因为它们已经在数据库的上下文中运行,它们可以非常有效地持久化查询数据。

您还需要进入失败模式,具体取决于您是否可以丢失任何消息。为了确保MSMQ中的消息持久性have to use Transactional Messaging:Service Broker在事务性队列处理方面比MSMQ更有效(因为它内置了事务支持,不像MSMQ必须使用DTC,这增加了开销) - 但是如果你的话消息量很低,这可能不是问题。