Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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