SQL Server sys.dm_broker_activated_tasks告诉我什么?

时间:2016-06-06 20:15:38

标签: sql-server service-broker

我有一个我继承的服务器代理应用程序,它带有假阴性。

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

我可以假设此视图显示正在激活的任务,并且没有那么多被激活但现在正在完成的过程吗?

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

当队列中的处理结束时,这似乎有效( ),之外偶尔。

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

不幸的是,由于这会使用火并忘记反模式,所以我现在不能做的不仅仅是使轮询监视器更聪明一些。

1 个答案:

答案 0 :(得分:0)

除了:

之外,这种观点并没有太大作用
  

为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。您将看到发送的每条消息,直到收到确认消息为止。