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