Propriedade Max_Queue_Readers é ignorada quando tenta limitar as tarefas de activação no Mediador de serviço

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 3163368
Sintomas
Considere o seguinte cenário:
  • Utilizar o facilitador de serviços no Microsoft SQL Server 2014 ou 2012 do Microsoft SQL Server.
  • Defina facilitador de serviços para a execução assíncrona procedimento armazenado.
  • Definir a propriedade Max_Queue_Readers para um valor específico para a fila do Mediador de serviço limitar o número de instâncias de uma activação armazenados procedimento executado ao mesmo tempo
Neste cenário, repare que activado mais tarefas estão em execução que o valor que está definido paraMax_Queue_Readers.
Causa
Este problema pode ocorrer se a base de dados do Mediador de serviço é comutada do modo de utilizador único (RESTRICTED_USER) para o modo de multi-utilizadores (MULTI_USER), executando o seguinte:

alter database <dbname> set multi_user
Quando o modo de utilizador é alterado na base de dados, o facilitador de serviços é encerrado e reiniciado. Durante este processo, o objecto QueueMonitor existente é interrompido e é criada outra instância do objecto QueueMonitor. Se o processo de activação estiver em execução uma longa operação enquanto Service Broker está a encerrar, o estado do objecto QueueMonitor é alterado para "ignorados".

No entanto, a instância de objecto QueueMonitor existente não é eliminada porque o contagem de referência não atingiu zero. Se o processo de activação ainda está em execução quando o Mediador de serviço for reiniciado, a nova instância do objecto QueueMonitor e o objecto QueueMonitor ignorado irão coexistir na mesma fila. A instância do objeto QueueMonitor ignorada será eliminada da próxima vez que inicia o facilitador de serviços.
Como contornar
Para contornar este problema, certifique-se de que execute o "alterar a base de dados [dbname] conjunto multi_user" quando nenhum procedimento activado está em execução. Para tal, utilize um dos seguintes métodos:

  • Antes de alterar o modo de utilizador, desactivar todas as filas na base de dados e, em seguida, reactivar todas as filas.
  • Antes de alterar o modo de utilizador, desactivar o processo de activação de todas as filas afectados executando o seguinte comando e, em seguida, volte a activar o processo de activação:

    alter queue <queueName> with activation ( status = off)
Mais Informação
Pode verificar o número de procedimentos de activação que está a executar para uma fila específica executando uma consulta contra "sys.dm_broker_activated_tasks" do seguinte modo:

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
É possível consultar o estado do monitor fila executando a consulta seguinte:

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
O estado do monitor de fila é apresentado como "removido" se o modo de utilizador da base de dados foi alterado.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 3163368 - Última Revisão: 05/19/2016 18:24:00 - Revisão: 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 KbMtpt
Comentários