Delen via


sys.dm_os_workers (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Geeft een rij terug voor elke werknemer in het systeem. Voor meer informatie over werkers, zie de Thread and Task Architecture Guide.

Opmerking

Om dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW), gebruik de naam sys.dm_pdw_nodes_os_workers. Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Kolomnaam Gegevenstype Description
werknemer_adres varbinary(8) Geheugenadres van de werknemer.
status int Alleen intern gebruik.
is_preemptive bit 1 = Werknemer werkt met preventieve planning. Elke worker die externe code draait, wordt onder preëmpieve planning uitgevoerd.
is_fiber bit 1 = Werknemer draait met lichtgewicht pooling. Voor meer informatie, zie sp_configure (Transact-SQL).
is_sick bit 1 = Werknemer zit vast in het proberen een spin-lock te verkrijgen. Als deze bit is ingesteld, kan dit wijzen op een probleem met contentie op een vaak geraadpleegd object.
is_in_cc_exception bit 1 = Worker verwerkt momenteel een niet-SQL Server-uitzondering.
is_fatal_exception bit Geeft aan of deze werknemer een fatale uitzondering heeft gekregen.
is_inside_catch bit 1 = Werker behandelt momenteel een uitzondering.
is_in_polling_io_completion_routine bit 1 = Werknemer voert momenteel een I/O-voltooiingsroutine uit voor een lopende I/O. Voor meer informatie, zie sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Aantal contextwisselingen in de scheduler die door deze werker worden uitgevoerd.
pending_io_count int Aantal fysieke I/O's die door deze medewerker worden uitgevoerd.
pending_io_byte_count bigint Totaal aantal bytes voor alle lopende fysieke I/O's voor deze worker.
pending_io_byte_average int Gemiddeld aantal bytes voor fysieke I/O's voor deze werker.
wait_started_ms_ticks bigint Op een gegeven moment, in ms_ticks, wanneer deze werknemer in de OPSCHORTENDE toestand kwam. Door deze waarde af te trekken van ms_ticks in sys.dm_os_sys_info geeft het aantal milliseconden dat de werknemer heeft gewacht terug.
wait_resumed_ms_ticks bigint Op een gegeven moment, in ms_ticks, toen deze werknemer de RUNNABLE staat binnenkwam. Door deze waarde af te trekken van ms_ticks in sys.dm_os_sys_info geeft het aantal milliseconden dat de werknemer in de uitvoerbare wachtrij heeft gezeten, terug.
task_bound_ms_ticks bigint Op een gegeven moment, in ms_ticks, wanneer een taak aan deze werknemer is gebonden.
worker_created_ms_ticks bigint Op een tijdstip, in ms_ticks, wanneer een werknemer wordt gecreëerd.
exception_num int Foutnummer van de laatste uitzondering die deze werknemer tegenkwam.
exception_severity int De ernst van de laatste uitzondering die deze medewerker tegenkwam.
exception_address varbinary(8) Code-adres dat de uitzondering opriep
affiniteit bigint De draadaffiniteit van de werker. Komt overeen met de affiniteit van de draad in sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Werknemersstaat. Dit kan een van de volgende waarden zijn:

INIT = Worker wordt momenteel geïnitialiseerd.

RUNNING = Werknemer draait momenteel ofwel niet-preventief of preventief.

RUNNABLE = De worker is klaar om te draaien op de scheduler.

GESCHORST = De werknemer is momenteel opgeschorst en wacht op een gebeurtenis om een signaal te sturen.
start_quantum bigint Tijd, in milliseconden, aan het begin van de huidige run van deze werknemer.
end_quantum bigint Tijd, in milliseconden, aan het einde van de huidige run van deze arbeider.
last_wait_type nvarchar(60) Soort last wait. Voor een lijst van wachttypes, zie sys.dm_os_wait_stats (Transact-SQL).
return_code int Retourwaarde van de laatste wachttijd. Dit kan een van de volgende waarden zijn:

0 =SUCCES

3 = IMPASSE

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Alleen intern gebruik.
max_quantum bigint Alleen intern gebruik.
boost_count int Alleen intern gebruik.
tasks_processed_count int Aantal taken dat deze medewerker heeft verwerkt.
fiber_address varbinary(8) Geheugenadres van de vezel waarmee deze werknemer is gekoppeld.

NULL = SQL Server is niet geconfigureerd voor lichtgewicht pooling.
taak_adres varbinary(8) Geheugenadres van de huidige taak. Voor meer informatie, zie sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Geheugenadres van het werkgeheugenobject. Voor meer informatie, zie sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Geheugenadres van de thread die aan deze worker is gekoppeld. Voor meer informatie, zie sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Geheugenadres van de werknemer die dit object als laatste heeft gesignaleerd. Voor meer informatie, zie sys.dm_os_workers.
scheduler_address varbinary(8) Geheugenadres van de planner. Voor meer informatie, zie sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Slaat de processorgroep-ID op die aan deze thread is toegewezen.
pdw_node_id int van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

De id voor het knooppunt waarop deze distributie zich bevindt.

Opmerkingen

Als de worker-staat RUNNING is en de worker non-preceptively draait, komt het worker-adres overeen met de active_worker_address in sys.dm_os_schedulers.

Wanneer een werknemer die op een gebeurtenis wacht wordt gesignaleerd, wordt de werknemer vooraan in de loopbare wachtrij geplaatst. SQL Server maakt het mogelijk dat dit duizend keer achter elkaar gebeurt, waarna de worker aan het einde van de wachtrij wordt geplaatst. Het verplaatsen van een werknemer naar het einde van de wachtrij heeft enige prestatie-implicaties.

Permissions

Voor SQL Server is VIEW SERVER STATE machtiging vereist.
Op SQL Database Premium Tiers is toestemming VIEW DATABASE STATE in de database vereist. Op SQL Database Standard en Basic Tiers vereist het Server Admin rollidmaatschap of een Azure Active Directory admin account.

Machtigingen voor SQL Server 2022 en hoger

Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Voorbeelden

Je kunt de volgende zoekopdracht gebruiken om te achterhalen hoe lang een werknemer al in een OPGESCHORTE of RUNNABLE toestand draait.

SELECT   
    t1.session_id,  
    CONVERT(varchar(10), t1.status) AS status,  
    CONVERT(varchar(15), t1.command) AS command,  
    CONVERT(varchar(10), t2.state) AS worker_state,  
    w_suspended =   
      CASE t2.wait_started_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_started_ms_ticks  
      END,  
    w_runnable =   
      CASE t2.wait_resumed_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_resumed_ms_ticks  
      END  
  FROM sys.dm_exec_requests AS t1  
  INNER JOIN sys.dm_os_workers AS t2  
    ON t2.task_address = t1.task_address  
  CROSS JOIN sys.dm_os_sys_info AS t3  
  WHERE t1.scheduler_id IS NOT NULL;  

Hier is het resultatenoverzicht.

 session_id status     command         worker_state w_suspended w_runnable  
 ---------- ---------- --------------- ------------ ----------- --------------------  
 4          background LAZY WRITER     SUSPENDED    688         688  
 6          background LOCK MONITOR    SUSPENDED    4657        4657
 19         background BRKR TASK       SUSPENDED    603820344   603820344  
 14         background BRKR EVENT HNDL SUSPENDED    63583641    63583641  
 51         running    SELECT          RUNNING      0           0  
 2          background RESOURCE MONITO RUNNING      0           603825954  
 3          background LAZY WRITER     SUSPENDED    422         422  
 7          background SIGNAL HANDLER  SUSPENDED    603820485   603820485  
 13         background TASK MANAGER    SUSPENDED    603824704   603824704  
 18         background BRKR TASK       SUSPENDED    603820407   603820407  
 9          background TRACE QUEUE TAS SUSPENDED    454         454  
 52         suspended  SELECT          SUSPENDED    35094       35094  
 1          background RESOURCE MONITO RUNNING      0           603825954  

In de uitvoer, wanneer w_runnable en w_suspended gelijk zijn, vertegenwoordigt dit de tijd waarin de werknemer in de SUSPENDE-toestand is. Anders w_runnable vertegenwoordigt dit de tijd die de werknemer in de RUNNABLE toestand doorbrengt. In de output is SUSPENDED de sessie 52 voor 35,094 milliseconden.

Zie ook

Dynamische beheerweergaven van SQL Server-besturingssysteem (Transact-SQL)
Architectuurhandleiding voor query-verwerking
Thread- en Taakarchitectuurgids