Momentan sunteți offline, așteptați să vă reconectați la internet

Proprietatea Max_Queue_Readers este ignorat atunci când încercați să limitați activare activități în Service Broker

IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată și poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate și articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cunoștințe în mai multe limbi. Articolele traduse automat și post-editate pot conține greșeli de vocabular, sintaxă și/sau gramatică. Microsoft nu este responsabil de inexactitățile, erorile sau daunele cauzate de traducerea greșită a conținutului sau de utilizarea acestuia de către clienți. Găsiți mai multe informații despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 3163368
Simptome
Să luăm în considerare următorul scenariu:
  • Utilizaţi Service Broker în Microsoft SQL Server 2014 sau Microsoft SQL Server 2012.
  • Setați Service Broker pentru executarea de proceduri stocate asincron.
  • Setați proprietatea Max_Queue_Readers la o valoare specifică pentru coada Service Broker pentru a limita cât mai multe instanțe ale o activare stocate procedură executați în același marcă de timp
În acest scenariu, observați că mai multe activat activitățile se execută decât valoarea setată pentruMax_Queue_Readers.
Cauză
Această problemă poate apărea dacă baza acoperire de date Service Broker este pornit din mod utilizator unic (RESTRICTED_USER) la modul multiutilizator (MULTI_USER) prin executarea următoarele:

alter database <dbname> set multi_user
Când modul de utilizator se modifică în baza acoperire de date, Service Broker este închiderea și repornirea. În timpul acestui proces, obiectul QueueMonitor existente se întrerupe și se creează o altă instanță QueueMonitor obiect. Dacă procesul de activare se execută o operațiune de mult, în marcă de timp ce Service Broker se închide, starea obiectului QueueMonitor se modifică la "întrerupte."

Cu toate acestea, instanța de obiect QueueMonitor existente nu este șters deoarece numărul de referință nu a ajuns la zero. Dacă procedura de activare se execută în continuare Service Broker repornirea, instanța noi de obiectul QueueMonitor și obiectul QueueMonitor întrerupte va coexista în coada același. Instanța de obiect QueueMonitor întrerupte vor fi șterse la următoarea pornire a Service Broker.
Remediere
Pentru a rezolva această problemă, asigurați-vă că executați "alter multi_user set acoperire de date [dbname]" nici o procedură de activat atunci când se execută. Pentru aceasta, utilizați una dintre următoarele metode:

  • Înainte să modificați modul de utilizator, dezactivați toate cozi în baza acoperire de date, și apoi reactivați toate cozi.
  • Înainte să modificați modul de utilizator, dezactivați procedura de activare pentru toate cozile afectate executând următoarea comandă, și apoi reactivați procedura de activare:

    alter queue <queueName> with activation ( status = off)
Informaţii suplimentare
Puteți verifica numărul de activare proceduri care se execută pentru o anumită coadă executând o interogare împotriva "sys.dm_broker_activated_tasks", după cum urmează:

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>
Pot interoga starea monitorul coadă executând următoarea interogare:

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>
Starea monitorul coada este afișat ca "a scăzut" dacă s-a modificat modul de bază acoperire de date de utilizator.

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 3163368 - Ultima examinare: 05/19/2016 18:24:00 - Revizie: 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 KbMtro
Feedback