Proprietà Max_Queue_Readers viene ignorato quando si tenta di limitare le attività di attivazione di Service Broker

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 3163368
Sintomi
Si consideri lo scenario seguente:
  • Utilizzare Service Broker nel 2014 di Microsoft SQL Server o Microsoft SQL Server 2012.
  • Service Broker è impostato per l'esecuzione di stored procedure asincrone.
  • Impostare la proprietà Max_Queue_Readers su un valore specifico per la coda di Service Broker limitare il numero di istanze di un'attivazione stored procedura eseguita contemporaneamente
In questo scenario, si nota l'attivazione di più attività in esecuzione rispetto al valore impostato perMax_Queue_Readers.
Cause
Questo problema può verificarsi se il database di Service Broker passa dalla modalità utente singolo (RESTRICTED_USER) in modalità multiutente (MULTI_USER) eseguendo il comando seguente:

alter database <dbname> set multi_user
Quando viene modificata la modalità utente del database, Service Broker viene arrestato e riavviato. Durante questo processo, l'oggetto QueueMonitor esistente viene eliminato e viene creata un'altra istanza dell'oggetto QueueMonitor. Se il processo di attivazione viene eseguita un'operazione di lunga durata durante l'arresto del Service Broker, lo stato dell'oggetto QueueMonitor è impostato su "rilasciato".

Tuttavia, l'istanza dell'oggetto QueueMonitor esistente non viene eliminato perché il conteggio dei riferimenti non ha raggiunto lo zero. Se la procedura di attivazione è ancora in esecuzione al riavvio di Service Broker, la nuova istanza dell'oggetto QueueMonitor e dall'oggetto QueueMonitor rilasciato sarà la coesistenza nella stessa coda. Istanza dell'oggetto QueueMonitor rilasciato verrà eliminata al successivo avvio di Service Broker.
Workaround
Per aggirare il problema, assicurarsi di eseguire "alter database [dbname] set multi_user" quando alcuna procedura attivata viene eseguito. A tale scopo, utilizzare uno dei seguenti metodi:

  • Prima di modificare la modalità utente, disattivare tutte le code nel database e quindi riattivare tutte le code.
  • Prima di modificare la modalità utente, disattivare la procedura di attivazione per tutte le code interessate eseguendo il comando seguente e quindi abilitare nuovamente la procedura di attivazione:

    alter queue <queueName> with activation ( status = off)
Informazioni
È possibile controllare il numero di procedure di attivazione che eseguono per una specifica coda eseguendo una query su "sys.dm_broker_activated_tasks" come segue:

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
È possibile richiedere lo stato del monitor coda eseguendo la query seguente:

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
Lo stato del monitor di coda viene visualizzato come "eliminato" se è stata modificata la modalità utente del database.

Avviso: questo articolo è stato tradotto automaticamente

Properti

ID Artikel: 3163368 - Tinjauan Terakhir: 05/19/2016 18:21:00 - Revisi: 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 KbMtit
Tanggapan