Udostępnij za pośrednictwem


sys.dm_os_workers (języka Transact-SQL)

Zwraca wiersz dla każdego pracownika w systemie.

Nazwa kolumny

Typ danych

Opis

worker_address

varbinary(8)

Adres pamięci pracownika.

status

int

Tylko do użytku wewnętrznego.

is_preemptive

bit

1 = Roboczy jest uruchamiany z cenią sobie wcześniejsze planowanie.Każdego pracownika, którym jest uruchomiony kod zewnętrzny jest uruchamiana cenią sobie wcześniejsze planowanie.

is_fiber

bit

1 = Roboczy jest uruchamiany z lekkie buforowania.Aby uzyskać więcej informacji, zobacz sp_configure (języka Transact-SQL).

is_sick

bit

1 = Pracownik jest zakleszczony, próby uzyskania pokrętła blokada.Jeśli ten bit jest zestaw, może to oznaczać problem z rywalizacja o często używanych obiektów.

is_in_cc_exception

bit

1 = Pracownik jest obecnie obsługa innych niż-SQL Server wyjątku.

is_fatal_exception

bit

Określa, czy ten pracownik otrzymał wyjątek krytyczny.

is_inside_catch

bit

1 = Pracownik aktualnie jest obsługa wyjątku.

is_in_polling_io_completion_routine

bit

1 = Pracownik aktualnie działa procedura ukończenia pracy we/wy dla oczekiwania We/Wy.Aby uzyskać więcej informacji, zobacz sys.dm_io_pending_io_requests (języka Transact-SQL).

context_switch_count

int

Liczba przełączeń kontekstu harmonogramu, które są wykonywane przez tego pracownika.

pending_io_count

int

Numer fizycznego we/wy, wykonywane przez tego pracownika.

pending_io_byte_count

bigint

Całkowita liczba bajtów dla wszystkich oczekujących fizycznej we/wy dla tego pracownika.

pending_io_byte_average

int

Średnia liczba bajtów fizycznej we/wy dla tego pracownika.

wait_started_ms_ticks

int

Punkt w czas, w ms_ticks, gdy ten pracownik wprowadzone Państwo zawieszone.Odjęcie tej wartości od ms_ticks w sys.dm_os_sys_info zwraca liczbę milisekund oczekiwania na pracownika.

wait_resumed_ms_ticks

int

Punkt w czas, w ms_ticks, przy stanie możliwe do uruchomienia tego pracownika.Odjęcie tej wartości od ms_ticks w sys.dm_os_sys_info zwraca liczbę milisekund, które pracownik został w kolejce możliwe do uruchomienia.

task_bound_ms_ticks

bigint

Punkt w czas, w ms_ticks, gdy zadanie jest związany z tego pracownika.

worker_created_ms_ticks

bigint

Punkt w czas, w ms_ticks, gdy pracownik jest tworzony.

exception_num

int

Błąd numer ostatniego wyjątek, który napotkał tego pracownika.

exception_severity

int

Waga ostatniego wyjątek, który napotkał tego pracownika.

exception_address

varbinary(8)

Kod adresu, który wygenerował wyjątek

locale

int

Ustawień regionalnych LCID dla pracownika.

affinity

bigint

Koligacja wątek roboczego.Dopasowuje koligacji wątek w sys.dm_os_threads (języka Transact-SQL).

state

nvarchar(60)

Stan roboczy.Może to być jedna z następujących wartości:

INIT = pracownik aktualnie jest inicjowany.

Z = pracownik jest aktualnie uruchomione, nonpreemptively lub preemptively.

Możliwe do uruchomienia = pracownik jest gotowy do uruchomienia na harmonogram.

ZAWIESZONE = pracownik jest aktualnie wstrzymana, oczekiwania na zdarzenie do jej wysłania sygnału.

start_quantum

bigint

Czas w milisekundach, na początku bieżącego uruchomienia tego pracownika.

end_quantum

bigint

Czas w milisekundach, na koniec bieżącego uruchomienia tego pracownika.

last_wait_type

nvarchar(60)

Typ ostatniego oczekiwania.Lista typów oczekiwania, zobacz sys.dm_os_wait_stats (języka Transact-SQL).

return_code

int

Zwraca wartość z ostatniego oczekiwania.Może to być jedna z następujących wartości:

0 = SUKCES

3 = ZAKLESZCZENIA

4 = PREMATURE_WAKEUP

258 = TIMEOUT

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

Numer zadania, które są przetwarzane przez tego pracownika.

fiber_address

varbinary(8)

Adres pamięci światłowodowe, z którą skojarzony jest ten pracownik.

NULL = SQL Server nie jest skonfigurowany dla puli lekkie.

task_address

varbinary(8)

Adres pamięci bieżącego zadania.Aby uzyskać więcej informacji, zobacz sys.dm_os_tasks (języka Transact-SQL).

memory_object_address

varbinary(8)

Adres pamięci podrzędnego obiektu pamięci.Aby uzyskać więcej informacji, zobacz sys.dm_os_memory_objects (języka Transact-SQL).

thread_address

varbinary(8)

Pamięci adres wątek skojarzonych z tym pracownika.Aby uzyskać więcej informacji, zobacz sys.dm_os_threads (języka Transact-SQL).

signal_worker_address

varbinary(8)

Adres pamięci pracownika, który ostatnio zasygnalizowane tego obiektu.Aby uzyskać więcej informacji, zobacz sys.dm_os_workers (języka Transact-SQL).

scheduler_address

varbinary(8)

Adres pamięci harmonogramu.Aby uzyskać więcej informacji, zobacz sys.dm_os_schedulers (języka Transact-SQL).

processor_group

smallint

Przechowuje identyfikator grupy procesora, która jest przypisana do tego wątek.

Uwagi

Jeśli stan roboczy jest uruchomiony, a pracownik działa nonpreemptively, pracownik odpowiada adres active_worker_address w sys.dm_os_schedulers.

Pracownik, który oczekuje na zdarzenie jest sygnalizowane, pracownik jest umieszczany na czele kolejki możliwe do uruchomienia.SQL ServerUmożliwia to niepożądane jednego tysiąca razy pod rząd, po upływie którego pracownik jest umieszczany na końcu kolejki.Przeniesienie pracownika na koniec kolejki ma wpływ na niektóre wydajność.

Uprawnienia

Wymaga uprawnienia Wyświetlanie stanu serwera na serwerze.

Przykłady

Aby dowiedzieć się, jak długo pracownik działaniu zawieszone lub możliwe do uruchomienia stan, można użyć następującej kwerendy.

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 danych wyjściowych gdy w_runnable i w_suspended są równe, to reprezentuje czas pracownik jest w stanie zawieszone.W przeciwnym razie w_runnable reprezentuje czas , który jest poświęcony przez pracownika w stanie możliwe do uruchomienia.W wyniku sesja 52 jest SUSPENDED dla 35,094 milisekund.