Max_Queue_Readers propriedade é ignorada quando você tentar limitar as tarefas de ativação no Service Broker

IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.

Clique aqui para ver a versão em Inglês deste artigo: 3163368
Sintomas
Considere o seguinte cenário:
  • Você usar o Service Broker em 2014 do Microsoft SQL Server ou Microsoft SQL Server 2012.
  • Defina o Service Broker para a execução do procedimento armazenado assíncrona.
  • Defina a propriedade Max_Queue_Readers para um valor específico para a fila do Service Broker limitar o número de instâncias de uma ativação armazenados procedimento executado ao mesmo tempo
Nesse cenário, você perceber que mais ativado tarefas estão sendo executada do que o valor definido paraMax_Queue_Readers.
Causa
Esse problema pode ocorrer se o banco de dados do Service Broker é alternado do modo de usuário único (RESTRICTED_USER) modo multiusuário (MULTI_USER) ao executar o seguinte:

alter database <dbname> set multi_user
Quando o modo de usuário é alterado no banco de dados, o Service Broker é desligado e reiniciado. Durante esse processo, o objeto QueueMonitor existente será descartado e outra instância do objeto QueueMonitor é criada. Se o processo de ativação estiver executando uma operação demorada enquanto o agente de serviços está sendo desligado, o status do objeto QueueMonitor é alterado para "ignorados".

No entanto, a instância existente do objeto QueueMonitor não é excluída porque sua contagem de referência não atingiu zero. Se o procedimento de ativação ainda está em execução quando o Service Broker é reiniciado, a nova instância do objeto QueueMonitor e o objeto quando solto QueueMonitor será coexistir na mesma fila. A instância do objeto QueueMonitor ignorada será excluída na próxima vez que inicia o Service Broker.
Como Contornar
Para contornar este problema, certifique-se de que você execute "alterar banco de dados [dbname] set multi_user" quando nenhum procedimento ativado está em execução. Para fazer isso, use um dos seguintes métodos:

  • Antes de alterar o modo do usuário, desabilitar todas as filas no banco de dados e depois habilitar novamente todas as filas.
  • Antes de alterar o modo de usuário, desativar o procedimento de ativação para todas as filas afetados executando o seguinte comando e depois habilitar novamente o procedimento de ativação:

    alter queue <queueName> with activation ( status = off)
Mais Informações
Você pode verificar o número de procedimentos de ativação em execução para uma fila específica ao executar uma consulta em relação a "sys.dm_broker_activated_tasks" da seguinte maneira:

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
Você pode consultar o estado do monitor de fila executando a consulta a seguir:

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
O estado do monitor de fila é exibido como "descartado" se o modo de usuário do banco de dados foi alterado.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 3163368 - Última Revisão: 05/19/2016 18:23: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