Udostępnij za pomocą


sys.dm_os_workers (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Zwraca wiersz dla każdego pracownika w systemie. Więcej informacji o pracownikach znajdziesz w Przewodniku po architekturze wątków i zadań.

Uwaga / Notatka

Aby wywołać to z Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_os_workers. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Nazwa kolumny Typ danych Description
adres_pracownika varbinary(8) Adres pamięci pracownika.
stan int Tylko do użytku wewnętrznego.
is_preemptive bit 1 = Pracownik działa z preemptywnym harmonogramem. Każdy pracownik uruchamiający zewnętrzny kod jest uruchamiany w ramach planowania preemptivnego.
is_fiber bit 1 = Pracownik działa z lekkim poolingiem. Więcej informacji można znaleźć w sp_configure (Transact-SQL).
is_sick bit 1 = Pracownik utknął próbując uzyskać blokadę spin. Jeśli ten bit jest ustawiony, może to wskazywać na problem z konkurencją na często odwiedzanym obiekcie.
is_in_cc_exception bit 1 = Pracownik obecnie obsługuje wyjątek spoza SQL Server.
is_fatal_exception bit Określa, czy ten pracownik otrzymał wyjątek śmiertelny.
is_inside_catch bit 1 = Pracownik obecnie obsługuje wyjątek.
is_in_polling_io_completion_routine bit 1 = Pracownik obecnie uruchamia procedurę zakończenia I/O dla oczekującego I/O. Więcej informacji można znaleźć w sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Liczba przełączników kontekstu planistów wykonywanych przez tego pracownika.
pending_io_count int Liczba fizycznych operacji I/O wykonywanych przez tego pracownika.
pending_io_byte_count bigint Łączna liczba bajtów dla wszystkich oczekujących fizycznych I/O dla tego pracownika.
pending_io_byte_average int Średnia liczba bajtów dla fizycznych I/O dla tego pracownika.
wait_started_ms_ticks bigint W momencie ms_ticks, kiedy ten pracownik wszedł w stan ZAWIESZONY. Odjęcie tej wartości od ms_ticks w sys.dm_os_sys_info zwraca liczbę milisekund, przez które pracownik czekał.
wait_resumed_ms_ticks bigint Moment w ms_ticks, kiedy ten pracownik wszedł w stan BIEGALNY. Odejmowanie tej wartości od ms_ticks w sys.dm_os_sys_info zwraca liczbę milisekund, przez które pracownik przebywał w kolejce do uruchomienia.
task_bound_ms_ticks bigint Moment w czasie, w ms_ticks, kiedy zadanie jest przypisane temu pracownikowi.
worker_created_ms_ticks bigint Punkt w czasie, w ms_ticks, kiedy powstaje pracownik.
exception_num int Numer błędu ostatniego wyjątku, na który napotkał ten pracownik.
exception_severity int Poważność ostatniego wyjątku, z którym napotkał ten pracownik.
exception_address varbinary(8) Adres kodowy, który wyrzucił wyjątek
koligacja bigint Powinowactwo nici pracownika. Odpowiada powinowactwu nici w sys.dm_os_threads (Transact-SQL).
stan nvarchar(60) Stan pracowniczy. Może być jedną z następujących wartości:

INIT = Pracownik jest obecnie inicjalizowany.

RUNNING = Pracownik obecnie działa albo nieprewencyjnie, albo preemptywnie.

RUNNABLE = Pracownik jest gotowy do uruchomienia na planiście.

SUSPENDED = Pracownik jest obecnie zawieszony, czeka na zdarzenie, które wyśle mu sygnał.
start_quantum bigint Czas, w milisekundach, na początku bieżącego cyklu tego pracownika.
end_quantum bigint Czas, w milisekundach, na końcu bieżącej serii tego pracownika.
last_wait_type nvarchar(60) Taki rodzaj ostatniego oczekiwania. Listę typów oczekiwania można znaleźć w sys.dm_os_wait_stats (Transact-SQL).
return_code int Wartość zwrotna z ostatniego oczekiwania. Może być jedną z następujących wartości:

0 =SUKCES

3 = IMPAS

4 = PREMATURE_WAKEUP

258 = PRZERWA
quantum_used bigint Tylko do użytku wewnętrznego.
max_quantum bigint Tylko do użytku wewnętrznego.
boost_count int Tylko do użytku wewnętrznego.
tasks_processed_count int Liczba zadań, które ten pracownik wykonał.
fiber_address varbinary(8) Adres pamięci światłowodu, z którym ten pracownik jest powiązany.

NULL = SQL Server nie jest skonfigurowany do lekkiej puli.
adres zadania varbinary(8) Adres pamięci bieżącego zadania. Więcej informacji można znaleźć w sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Adres pamięci obiektu pamięci roboczej. Więcej informacji można znaleźć w sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Adres pamięci wątku powiązanego z tym workerem. Więcej informacji można znaleźć w sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Adres pamięci pracownika, który ostatnio sygnalizował ten obiekt. Więcej informacji można znaleźć w sys.dm_os_workers.
scheduler_address varbinary(8) Adres pamięci planisty. Więcej informacji można znaleźć w sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Przechowuje identyfikator grupy procesorów przypisany do tego wątku.
pdw_node_id int Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW)

Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

Uwagi

Jeśli stan pracownika DZIAŁA, a pracownik działa niepreemptywnie, adres pracownika odpowiada active_worker_address w sys.dm_os_schedulers.

Gdy pracownik oczekujący na zdarzenie zostaje zasygnalizowany, trafia na początek kolejki do uruchomienia. SQL Server pozwala na to, aby to powtórzyło się tysiąc razy z rzędu, po czym pracownik trafia na koniec kolejki. Przesunięcie pracownika na koniec kolejki ma pewne konsekwencje dla wydajności.

Permissions

W programie SQL Server wymagane jest VIEW SERVER STATE uprawnienia.
Na poziomach SQL Database Premium wymaga VIEW DATABASE STATE to uprawnień do bazy danych. Na standardowych poziomach Server Admin SQL Database i Basic wymaga członkostwa w roli lub konta Azure Active Directory admin .

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.

Przykłady

Możesz użyć poniższego zapytania, aby dowiedzieć się, jak długo pracownik działa w stanie ZAWIESZONYM lub MOŻLIWYM do URUCHOMIENIA.

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;  

Oto zestaw wyników.

 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  

W produkcji, gdy w_runnable i są równe w_suspended , oznacza to czas, w którym pracownik znajduje się w stanie ZAWIESZONYM. W przeciwnym razie oznacza w_runnable czas spędzony przez pracownika w stanie RUNNABLE. W wyniku sesja 52 trwa SUSPENDED35,094 milisekundy.

Zobacz też

Dynamiczne widoki zarządzania związane z systemem operacyjnym PROGRAMU SQL Server (Transact-SQL)
Przewodnik po architekturze przetwarzania zapytań
Przewodnik po architekturze wątków i zadań