当您尝试限制的服务中介程序中的激活任务时,Max_Queue_Readers 属性将被忽略

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3163368
症状
请考虑以下情形:
  • 使用 Microsoft SQL Server 2014年或 Microsoft SQL Server 2012年中的服务中介程序。
  • 您可以为存储的过程的异步执行设置服务中介程序。
  • Max_Queue_Readers属性设置为特定值的服务中介程序队列来激活的多少个实例存储过程运行在相同的时间限制
在此方案中,您注意到更多激活任务运行比为Max_Queue_Readers设置的值。
原因
如果服务中介程序数据库切换从单用户模式 (RESTRICTED_USER) 到多用户模式 (MULTI_USER) 通过运行以下,则会发生此问题 ︰

alter database <dbname> set multi_user
用户模式更改时在数据库上,服务中介程序关闭并重新启动。在此过程中,将现有的 QueueMonitor 对象,并创建 QueueMonitor 对象的另一个实例。如果激活过程正在运行较长的操作服务中介程序关闭时,QueueMonitor 对象的状态更改为"下沉"。

但是,由于未引用计数达到零,不会删除现有的 QueueMonitor 对象实例。如果在重新启动时服务中介程序仍在运行激活过程,QueueMonitor 对象和被丢弃的 QueueMonitor 对象的新实例将共同存在同一队列中。丢弃的 QueueMonitor 对象实例将被删除的服务中介程序启动下一次。
替代方法
若要变通解决此问题,请确保您运行"更改数据库 [dbname] 组 multi_user"时不激活过程正在运行。若要执行此操作,请使用以下方法之一 ︰

  • 更改用户模式之前,禁用所有队列在数据库中,然后再重新启用所有队列。
  • 更改用户模式之前,请通过运行以下命令,禁用激活过程为所有受影响的队列,然后再重新启用激活过程 ︰

    alter queue <queueName> with activation ( status = off)
更多信息
您可以检查所运行的操作系统特定的队列,通过运行"sys.dm_broker_activated_tasks"对的查询,如下所示的激活过程数 ︰

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
您可以通过运行下面的查询来查询队列监视器的状态 ︰

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
"下沉"如果数据库用户模式已更改,则显示队列监视器的状态。

警告:本文已自动翻译

属性

文章 ID:3163368 - 上次审阅时间:05/19/2016 18:29:00 - 修订版本: 1.0

Microsoft SQL Server 2016 Developer, Microsoft SQL Server 2016 Enterprise, Microsoft SQL Server 2016 Standard, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise Core, Microsoft SQL Server 2014 Business Intelligence, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Enterprise Core, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Workgroup

  • kbprb kbsurveynew kbexpertiseadvanced kbmt KB3163368 KbMtzh
反馈