Sdílet prostřednictvím


sys.dm_os_workers (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Vrací řádek pro každého pracovníka v systému. Pro více informací o pracovnících viz Průvodce architekturou vláken a úloh.

Poznámka:

Pro volání z Azure Synapse Analytics nebo Analytics Platform System (PDW) použijte název sys.dm_pdw_nodes_os_workers. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

Název sloupce Datový typ Description
adresa_pracovníka varbinary(8) Paměťová adresa pracovníka.
stav int Pouze interní použití.
is_preemptive bit 1 = Pracovník běží s předběžným plánováním. Každý pracovník, který spouští externí kód, je spuštěn v režimu předběžného plánování.
is_fiber bit 1 = Pracovník běží s lehkým poolingem. Pro více informací viz sp_configure (Transact-SQL).
is_sick bit 1 = Pracovník je zaseknutý při snaze získat spin lock. Pokud je tento bit nastaven, může to naznačovat problém s rivalitou na často navštěvovaném objektu.
is_in_cc_exception bit 1 = Worker aktuálně zpracovává výjimku mimo SQL Server.
is_fatal_exception bit Specifikuje, zda tento pracovník obdržel smrtelnou výjimku.
is_inside_catch bit 1 = Pracovník právě zpracovává výjimku.
is_in_polling_io_completion_routine bit 1 = Pracovník právě spouští rutinu dokončení I/O pro čekající I/O. Pro více informací viz sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Počet kontextových přepnutí plánovače, které tento pracovník vykonává.
pending_io_count int Počet fyzických I/O procesů, které tento pracovník vykonává.
pending_io_byte_count bigint Celkový počet bajtů pro všechny čekající fyzické I/O pro tohoto pracovníka.
pending_io_byte_average int Průměrný počet bajtů pro fyzické I/O pro tohoto pracovníka.
wait_started_ms_ticks bigint V okamžiku, v roce ms_ticks, kdy tento pracovník vstoupil do stavu POZASTAVENÍ. Odečtením této hodnoty od ms_ticks v sys.dm_os_sys_info vrátíme počet milisekund, které pracovník čekal.
wait_resumed_ms_ticks bigint V okamžiku, v ms_ticks, kdy tento pracovník vstoupil do stavu RUNNABLE. Odečtením této hodnoty od ms_ticks v sys.dm_os_sys_info vrátí se počet milisekund, během kterých byl pracovník ve frontě k běhu.
task_bound_ms_ticks bigint Okamžik v čase, v ms_ticks, kdy je úkol vázán na tohoto pracovníka.
worker_created_ms_ticks bigint Okamžik v čase, v ms_ticks, kdy je vytvořen pracovník.
exception_num int Chyba číslo poslední výjimky, na kterou se tento pracovník setkal.
exception_severity int Závažnost poslední výjimky, se kterou se tento pracovník setkal.
exception_address varbinary(8) Kódová adresa, která vyhodila výjimku
spřažení bigint Přítavost k vláknům pracovníka. Odpovídá afinitě vlákna v sys.dm_os_threads (Transact-SQL).
stav nvarchar(60) Pracovní stát. Může to být jedna z následujících hodnot:

INIT = Pracovník je právě inicializován.

RUNNING = Worker v současnosti běží buď nepreventivně, nebo preventivně.

RUNNABLE = Pracovník je připraven k provozu na plánovači.

POZASTAVENO = Pracovník je momentálně pozastaven a čeká na událost, která mu pošle signál.
start_quantum bigint Čas v milisekundách na začátku aktuálního běhu tohoto pracovníka.
end_quantum bigint Čas v milisekundách na konci aktuálního běhu tohoto pracovníka.
poslední_typ_čekání nvarchar(60) Druh posledního čekání. Pro seznam typů čekání viz sys.dm_os_wait_stats (Transact-SQL).
return_code int Návratnost z posledního čekání. Může to být jedna z následujících hodnot:

0 =ÚSPĚCH

3 = PATOVÁ SITUACE

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Pouze interní použití.
max_quantum bigint Pouze interní použití.
boost_count int Pouze interní použití.
tasks_processed_count int Počet úkolů, které tento pracovník zpracoval.
fiber_address varbinary(8) Paměťová adresa vlákna, se kterým je tento pracovník spojen.

NULL = SQL Server není nakonfigurován pro lehké poolování.
adresa_úkolu varbinary(8) Paměťová adresa aktuálního úkolu. Pro více informací viz sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Paměťová adresa pracovního paměťového objektu. Pro více informací viz sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Paměťová adresa vlákna spojeného s tímto workerem. Pro více informací viz sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Paměťová adresa pracovníka, který tento objekt naposledy signalizoval. Pro více informací viz sys.dm_os_workers.
scheduler_address varbinary(8) Paměťová adresa plánovače. Pro více informací viz sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Ukládá ID skupiny procesorů, které je tomuto vláknu přiřazeno.
pdw_node_id int platí pro: Azure Synapse Analytics, Analytics Platform System (PDW)

Identifikátor uzlu, na který je tato distribuce zapnutá.

Poznámky

Pokud pracovní stav BĚŽÍ a pracovník běží nepředemptivně, adresa pracovníka odpovídá active_worker_address v sys.dm_os_schedulers.

Když je signalizován pracovník čekající na událost, je pracovník umístěn na čelo běžitelné fronty. SQL Server umožňuje, aby se to stalo tisíckrát za sebou, po čemž je pracovník umístěn na konec fronty. Přesun pracovníka na konec fronty má určité dopady na výkonnost.

Povolení

Na SQL Serveru vyžaduje VIEW SERVER STATE oprávnění.
Na SQL Database Premium Tiers vyžaduje oprávnění VIEW DATABASE STATE v databázi. Na SQL Database Standard a Basic Tiers je vyžadováno členství Server Admin v roli, tedy Azure Active Directory admin účet.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.

Examples

Můžete použít následující dotaz, abyste zjistili, jak dlouho pracovník běží ve stavu POZASTAVENÉM nebo BĚŽITELNÉM.

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;  

Tady je soubor výsledků.

 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  

Ve výstupu, když w_runnable jsou a rovny w_suspended , představuje to dobu, kdy je pracovník v POZASTAVENÉM stavu. Jinak představuje čas, w_runnable který pracovník stráví ve stavu RUNNABLE. Ve výstupu trvá relace 52SUSPENDED na 35,094 milisekundy.

Viz také

Zobrazení dynamické správy související s operačním systémem SQL Server (Transact-SQL)
Průvodce architekturou zpracování dotazů
Průvodce architekturou vláken a úloh