Service Broker外部激活器响应需要很长时间

时间:2017-06-14 14:23:06

标签: sql-server sql-server-2014 service-broker

我在SQL Server 2014上有两个数据库,SourceDBLogDB。在SourceDB上,Service Broker;在服务器上,Service Broker External Activator服务已激活。

在SourceDB上我有TargetQueue,其中一个表的(Product)插入触发器在TargetQueue上发送更改,而TargetQueue具有事件通知,它会轻推我的外部exe客户端。在exe客户端内部,我最终通过WAITFOR(RECEIVE TOP (1))..将数据出列,并将它们直接记录到LogDB。

因此,当我启动SBEA服务并在第一次插入表a /几条记录(删除所有记录之后)后,TargetQueue立即填充,但从插入到SourceDB到插入LogDB的时间间隔约为 3-6秒,基于事件通知的时间消耗在这里我猜,不确定。对于此后的进一步插入,间隔变为 100ms ,如下所示。

第一

First

另外

Further

  1. 为什么第一次插入需要的时间太长,为什么在删除表的所有记录之后,又变成了多久?为什么,进一步比第一次更短?
  2. 我可以将间隔减小到10ms以下,因为我可以在10ms内使用SQLCLR实现几乎相同的结构,并且最快的响应对我的应用也是至关重要的吗? (两个结构都在同一个SQL Server实例本地工作)

1 个答案:

答案 0 :(得分:1)

您可以通过放弃外部激活器和事件通知来简化流程。而是让你的程序连续运行WAITFOR(在循环中直接在目标队列上接收。

以下是一个让您入门的示例:https://code.msdn.microsoft.com/Service-Broker-Message-e81c4316