查询通知内部

时间:2019-01-07 17:28:01

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

我正在考虑使用Query Notifications作为确定表中数据何时更改的轻量级方法。我知道他们使用Service Broker,并且(尽管我很难解释确切的原因)它们看上去确实比CDC或Triggers更合适。

通过向数据库提供查询来设置查询通知,查询将发送通知“ ...when the results of [the provided] query change”。

在我看来,这就像他们在说您所提出的查询一样,一遍又一遍。我认为我很可能会误解SQL在该查询的监视下所做的操作以监视所说的更改,但是我无法在线找到有关实际发生的任何信息。我希望它可以解析查询并在查询中引用的任何对象上设置超级duper轻量级“触发器”,但是由于我不知道,这让我不愿使用该功能。

是否有人熟悉Service Broker和查询通知功能来解释数据库引擎如何监视提供的查询中的更改?

1 个答案:

答案 0 :(得分:2)

基于与物化(索引)视图相同的技术。当您为查询“选择...从...中”设置QN时,引擎将使用相同的查询来设置伪索引视图。每当您运行任何DML时,执行计划都必须维护“伪造”的索引视图数据并相应地生成计划。当(如果)DML执行实际上尝试更新伪索引视图中的行时,这表明原始查询可能已经更改了结果,并且触发了通知。然后删除“伪造”索引视图。用针说,永远不会实现“伪”索引视图(不存在实际行)。

这就是为什么查询可以订阅QN的限制与索引视图限制几乎相同的原因。

马丁(Martin)链接的文章对此进行了解释,但此处将其留作将来的参考。