Se omite la propiedad Max_Queue_Readers al intentar limitar las tareas de activación de Service Broker

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3163368
Síntomas
Considere el siguiente escenario:
  • Utilizar a Service Broker en 2014 de Microsoft SQL Server o Microsoft SQL Server 2012.
  • Configurar a Service Broker para la ejecución del procedimiento almacenado asincrónica.
  • Establezca la propiedad Max_Queue_Readers en un valor específico para la cola de Service Broker limitar el número de instancias de una activación almacenados procedimiento ejecutar al mismo tiempo
En esta situación, observa que activa más tareas apuntan a que el valor que se establece paraMax_Queue_Readers.
Causa
Este problema puede producirse si la base de datos de Service Broker se cambia de modo de usuario único (RESTRICTED_USER) a modo multiusuario (MULTI_USER) ejecutando lo siguiente:

alter database <dbname> set multi_user
Cuando se cambia el modo de usuario de la base de datos, Service Broker se apaga y se reinicia. Durante este proceso, se coloca el objeto QueueMonitor existente y se crea otra instancia del objeto QueueMonitor. Si el proceso de activación ejecuta una operación larga mientras está cerrando Service Broker, el estado del objeto QueueMonitor se cambia a "perdidos".

Sin embargo, no se elimina la instancia del objeto QueueMonitor existente porque su recuento de referencias no alcanzó cero. Si el procedimiento de activación sigue ejecutándose cuando Service Broker se reinicia, la nueva instancia del objeto QueueMonitor y el objeto QueueMonitor colocado coexisten en la misma cola. La instancia del objeto QueueMonitor perdida se eliminará la próxima vez que se inicia de Service Broker.
Solución
Para evitar este problema, asegúrese de que ejecute "alteran la base de datos [dbname] set multi_user" cuando ningún procedimiento activado se está ejecutando. Para ello, utilice uno de los métodos siguientes:

  • Antes de cambiar el modo de usuario, deshabilitar todas las colas en la base de datos y, a continuación, volver a habilitar todas las colas.
  • Antes de cambiar el modo de usuario, deshabilitar el procedimiento de activación para todas las colas afectados ejecutando el comando siguiente y, a continuación, volver a habilitar el procedimiento de activación:

    alter queue <queueName> with activation ( status = off)
Más información
Puede comprobar el número de procedimientos que se ejecutan para una cola específica mediante la ejecución de una consulta en "sys.dm_broker_activated_tasks" como sigue:

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
Puede consultar el estado del monitor de cola ejecutando la consulta siguiente:

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
El estado del monitor de cola se muestra como "eliminado" si se ha cambiado el modo de usuario de base de datos.

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3163368 - Última revisión: 05/19/2016 18:17:00 - Revisión: 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 KbMtes
Comentarios