SQL 服务器 sys.dm_broker_activated_tasks 告诉我什么?

What does SQL Server sys.dm_broker_activated_tasks tell me?

我继承了一个服务器代理应用程序,它因误报而异常终止。

我认为它使用 sys.dm_broker_activated_tasks 不正确,我想验证我对该视图显示内容的理解是否正确。

我可以假设此视图显示的是正在激活的任务,而不是那些已激活但现在正在完成的任务吗?

我的程序通过查找 sys.dm_broker_activated_tasks 中何时没有该队列的条目来监视处理是否完成。

这似乎有效(大部分),除了偶尔在队列结束时结束。

table 中的行似乎在队列中的最后一条消息完成之前就消失了。

不幸的是,由于这使用了火而忘记反模式,此时我真的不能做更多的事情,只能让轮询监视器更智能一些。

除了以下内容外,该视图并没有太大作用:

Returns a row for each stored procedure activated by Service Broker.

https://msdn.microsoft.com/en-us/library/ms175029.aspx

不确定您是否看过代码,但我认为更好的用法是将它与 sys.dm_exec_sessions

结合使用
select
 at.spid
,DB_NAME(at.database_id) AS [DatabaseName]
,at.queue_id
,at.[procedure_name]
,s.[status]
,s.login_time
from
    sys.dm_broker_activated_tasks at
inner join
    sys.dm_exec_sessions s
on
    at.spid = s.session_id;

另一个对 Service Broker 进行故障排除的好地方是 sys.transmission_queue。您会看到发送到那里的每条消息,直到确认收到消息为止。