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。您会看到发送到那里的每条消息,直到确认收到消息为止。
我继承了一个服务器代理应用程序,它因误报而异常终止。
我认为它使用 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。您会看到发送到那里的每条消息,直到确认收到消息为止。