sys.dm_os_workers (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Returnerar en rad för varje arbetare i systemet. För mer information om arbetare, se Tråd- och uppgiftsarkitekturguiden.

Anmärkning

För att kalla detta från Azure Synapse Analytics eller Analytics Platform System (PDW), använd namnet sys.dm_pdw_nodes_os_workers. Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Kolumnnamn Datatyp Description
arbetare_adress varbinary(8) Minnesadressen till arbetaren.
status int Endast intern användning.
is_preemptive bit 1 = Arbetaren kör med förebyggande schemaläggning. Alla arbetare som kör extern kod körs under preemptiv schemaläggning.
is_fiber bit 1 = Arbetaren kör med lättviktspooling. För mer information, se sp_configure (Transact-SQL).
is_sick bit 1 = Arbetaren fastnar i försöken att få ett spinnlås. Om denna bit är satt kan det indikera ett problem med konkurrens på ett ofta åtkommet objekt.
is_in_cc_exception bit 1 = Worker hanterar för närvarande ett icke-SQL Server-undantag.
is_fatal_exception bit Specificerar om denna arbetare fick ett fatalt undantag.
is_inside_catch bit 1 = Arbetaren hanterar för närvarande ett undantag.
is_in_polling_io_completion_routine bit 1 = Arbetaren kör för närvarande en I/O-slutföranderutin för en väntande I/O. För mer information, se sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Antal schemaläggarkontextbyten som utförs av denna arbetare.
pending_io_count int Antal fysiska I/O som utförs av denna arbetare.
pending_io_byte_count bigint Totalt antal byte för alla pågående fysiska I/O:er för denna arbetare.
pending_io_byte_average int Genomsnittligt antal bytes för fysiska I/O:er för denna arbetare.
wait_started_ms_ticks bigint Tidpunkt, i ms_ticks, när denna arbetare gick in i SUSPENDERAT tillstånd. Genom att subtrahera detta värde från ms_ticks i sys.dm_os_sys_info returneras antalet millisekunder som arbetaren har väntat.
wait_resumed_ms_ticks bigint Tidpunkt, i ms_ticks, när denna arbetare gick in i RUNNABLE-tillståndet. Genom att subtrahera detta värde från ms_ticks i sys.dm_os_sys_info återges antalet millisekunder som arbetaren har varit i den körbara kön.
task_bound_ms_ticks bigint Tidpunkt, i ms_ticks, när en uppgift är bunden till denna arbetare.
worker_created_ms_ticks bigint Tidpunkt, i ms_ticks, när en arbetare skapas.
exception_num int Felnummer för det senaste undantaget som denna arbetare stötte på.
exception_severity int Allvarligheten i det sista undantaget som denna arbetare stötte på.
exception_address varbinary(8) Kodadressen som kastade undantaget
samhörighet bigint Arbetarens trådaffinitet. Matchar trådens affinitet i sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Arbetarstat. Kan vara något av följande värden:

INIT = Worker initieras för tillfället.

RUNNING = Arbetaren körs för närvarande antingen icke-preemptivt eller preemptivt.

RUNNABLE = Arbetaren är redo att köras på schemaläggaren.

SUSPENDERAD = Arbetaren är för närvarande avstängd och väntar på att en händelse ska skicka en signal.
start_quantum bigint Tid, i millisekunder, i början av den aktuella körningen av denna arbetare.
end_quantum bigint Tid, i millisekunder, i slutet av den nuvarande perioden för denna arbetare.
last_wait_type nvarchar(60) Typ av sista väntan. För en lista över väntetyper, se sys.dm_os_wait_stats (Transact-SQL).
return_code int Returvärde från senaste väntan. Kan vara något av följande värden:

0 =FRAMGÅNG

3 = DÖDLÄGE

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Endast intern användning.
max_quantum bigint Endast intern användning.
boost_count int Endast intern användning.
tasks_processed_count int Antal uppgifter som denna arbetare hanterade.
fiber_address varbinary(8) Minnesadressen för fibern som denna arbetare är kopplad till.

NULL = SQL Server är inte konfigurerad för lättviktspoolning.
uppgiftsadress varbinary(8) Minnesadressen för den aktuella uppgiften. För mer information, se sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Minnesadressen till arbetsminnesobjektet. För mer information, se sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Minnesadressen till tråden som är kopplad till denna arbetare. För mer information, se sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Minnesadressen till arbetaren som senast signalerade detta objekt. För mer information, se sys.dm_os_workers.
scheduler_address varbinary(8) Minnesadressen till schemaläggaren. För mer information, se sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Lagrar processorgrupps-ID:t som är tilldelat denna tråd.
pdw_node_id int gäller för: Azure Synapse Analytics, Analytics Platform System (PDW)

Identifieraren för noden som den här fördelningen är på.

Anmärkningar

Om arbetarens tillstånd är KÖRANDE och arbetaren kör icke-preemptivt, matchar arbetaradressen active_worker_address i sys.dm_os_schedulers.

När en arbetare som väntar på ett evenemang signaleras placeras arbetaren längst fram i den körbara kön. SQL Server tillåter detta att ske tusen gånger i rad, varefter arbetaren placeras längst bak i kön. Att flytta en arbetare till slutet av kön har vissa prestandakonsekvenser.

Permissions

På SQL Server kräver VIEW SERVER STATE behörighet.
På SQL Database Premium Tiers krävs VIEW DATABASE STATE behörighet i databasen. På SQL Database Standard och Basic Tiers krävs rollmedlemskap Server Admin eller konto Azure Active Directory admin .

Behörigheter för SQL Server 2022 och senare

Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.

Examples

Du kan använda följande fråga för att ta reda på hur länge en arbetare har varit i drift i ett SUSPENDERAT eller RUNNABLET tillstånd.

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;  

Här är resultatet.

 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  

I utdatan, när w_runnable och w_suspended är lika, representerar detta den tid då arbetaren befinner sig i SUSPENDER-tillståndet. Annars w_runnable representerar den tid som arbetaren tillbringar i det RUNNABLE-tillståndet. I utdata är SUSPENDED sessionen 52 i 35,094 millisekunder.

Se även

SQL Server-operativsystemrelaterade dynamiska hanteringsvyer (Transact-SQL)
arkitekturguide för frågebearbetning
Tråd- och uppgiftsarkitekturguide