Udostępnij za pomocą


sys.dm_os_schedulers (Transact-SQL)

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

Zwraca jeden wiersz na harmonogram w programie SQL Server, w którym każdy harmonogram jest mapowany na pojedynczy procesor. Ten widok służy do monitorowania stanu harmonogramu lub identyfikowania niekontrolowanych zadań. Więcej informacji o planistach można znaleźć 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_schedulers. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Nazwa kolumny Typ danych Description
scheduler_address varbinary(8) Adres pamięci planisty. Nie jest nullowalny.
parent_node_id int ID węzła, do którego należy harmonogram, znanego również jako węzeł nadrzędny. Reprezentuje to niejednolity węzeł dostępu do pamięci (NUMA). Nie jest nullowalny.
identyfikator_harmonogramu int Identyfikacja osoby planującej. Wszystkie planowniki używane do regularnych zapytań mają numery ID mniejsze niż 1048576. Planowniki z identyfikatorami większymi lub równymi 1048576 są używane wewnętrznie przez SQL Server, na przykład dedykowany harmonogram połączeń administratora. Nie jest nullowalny.
cpu_id smallint ID CPU przypisany do harmonogramu.

Nie jest nullowalny.

Uwaga: 255 nie oznacza powinowactwa, jak miało to miejsce w SQL Server 2005 (9.x). Zobacz sys.dm_os_threads (Transact-SQL ), aby uzyskać dodatkowe informacje o powinowactwie.
stan nvarchar(60) Wskazuje status planisty. Może być jedną z następujących wartości:

- HIDDEN ONLINE
- UKRYTE OFFLINE
- WIDOCZNE ONLINE
- WIDOCZNE OFFLINE
- VISIBLE ONLINE (DAC)
- HOT_ADDED

Nie jest nullowalny.

Planiste HIDDEN są używane do przetwarzania żądań wewnętrznych w silniku bazy danych. Planiste VISIBLE są używane do przetwarzania żądań użytkowników.

Planowniki OFFLINE mapują się na procesory będące offline w masce powinowactwa i dlatego nie są używane do przetwarzania żądań. Planowniki ONLINE mapują się na procesory będące online w masce powinowactwa i dostępne do przetwarzania wątków.

DAC wskazuje, że harmonogram działa pod dedykowanym połączeniem administratora.

HOT ADDED oznacza, że harmonogramy zostały dodane w odpowiedzi na zdarzenie hot add CPU.
is_online bit Jeśli SQL Server jest skonfigurowany tak, by korzystać tylko z części dostępnych procesorów na serwerze, ta konfiguracja może oznaczać, że niektóre harmonogramy są mapowane na procesory spoza maski powinowactwa. Jeśli tak jest, ta kolumna zwraca 0. Ta wartość oznacza, że planista nie jest używany do przetwarzania zapytań ani partii.

Nie jest nullowalny.
is_idle bit 1 = Harmonogram jest bezczynny. Obecnie żaden pracownik nie działa. Nie jest nullowalny.
preemptive_switches_count int Liczba razy, gdy pracownicy tego harmonogramu przełączali się na tryb prewencyjny.

Aby wykonać kod poza programem SQL Server (na przykład rozszerzonymi procedurami składowanymi i zapytaniami rozproszonymi), wątek musi być wykonywany poza kontrolą harmonogramu niewłaściwego. W tym celu proces roboczy przełącza się w tryb wyprzedzania.
context_switches_count int Liczba zmian kontekstu, które miały miejsce na tym planiście. Nie jest nullowalny.

Aby umożliwić innym pracownikom uruchomienie, aktualny pracownik musi zrezygnować z kontroli nad planistą lub kontekstem przełącznika.

Nuta: Jeśli pracownik zwróci planer i umieści się w kolejce do uruchomienia, a potem nie znajdzie innych pracowników, sam się wybierze. W tym przypadku context_switches_count nie jest aktualizowany, ale yield_count zostaje.
idle_switches_count int Liczba razy harmonogram czekał na zdarzenie będąc bezczynnym. Ta kolumna jest podobna do context_switches_count. Nie jest nullowalny.
current_tasks_count int Liczba aktualnych zadań powiązanych z tym planistą. To liczenie obejmuje następujące wyniki:

- Zadania czekające na wykonanie przez pracownika.
- Zadania, które są obecnie oczekujące lub działające (w stanie ZAWIESZONYM lub URUCHOMIALNYM).

Po wykonaniu zadania liczba ta jest zmniejszana. Nie jest nullowalny.
runnable_tasks_count int Liczba pracowników, którym przypisane są zadania, którzy czekają na zaplanowanie w kolejce do uruchomienia. Nie jest nullowalny.
current_workers_count int Liczba pracowników związanych z tym planistą. Liczba ta obejmuje pracowników, którym nie przydzielono żadnego zadania. Nie jest nullowalny.
active_workers_count int Liczba aktywnych pracowników. Aktywny pracownik nigdy nie jest preemptywny, musi mieć powiązane zadanie i jest albo biegający, możliwy do biegania, albo zawieszony. Nie jest nullowalny.
work_queue_count bigint Liczba zadań w kolejce oczekującej. Te zadania czekają na pracownika, który je przeją. Nie jest nullowalny.
pending_disk_io_count int Liczba oczekujących na zakończenie oczekujących na zakończenie. Każdy planista ma listę oczekujących operacji I/O, które są sprawdzane, aby ustalić, czy zostały ukończone za każdym razem, gdy następuje zmiana kontekstu. Liczba jest zwiększana w momencie wstawienia żądania. Ta liczba jest zmniejszana po zakończeniu zamówienia. Ta liczba nie wskazuje stanu I/O. Nie jest nullowalny.
load_factor int Wartość wewnętrzna wskazująca postrzegane obciążenie tego harmonogramu. Ta wartość służy do określenia, czy nowe zadanie powinno zostać umieszczone na tym planatorze, czy w innym. Ta wartość jest przydatna do debugowania, gdy okazuje się, że planatory nie są równomiernie załadowane. Decyzja o routingu jest podejmowana na podstawie obciążenia na planistach. SQL Server wykorzystuje również współczynnik obciążenia złożony z węzłów i planistów, aby pomóc określić najlepszą lokalizację do pozyskiwania zasobów. Gdy zadanie jest w kolejce, współczynnik obciążenia jest zwiększany. Po zakończeniu zadania współczynnik obciążenia maleje. Wykorzystanie współczynników obciążenia pomaga systemu SQL Server lepiej zrównoważyć obciążenie pracą. Nie jest nullowalny.
yield_count int Wartość wewnętrzna używana do wskazania postępów w tym harmonogramie. Ta wartość jest wykorzystywana przez Scheduler Monitor do określenia, czy pracownik na planierze nie ustępuje innym pracownikom na czas. Ta wartość nie oznacza, że pracownik lub zadanie przeszło na nowego pracownika. Nie jest nullowalny.
last_timer_activity bigint W tickach CPU ostatni raz, gdy kolejka timera planisty była sprawdzana przez planistę. Nie jest nullowalny.
failed_to_create_worker bit Ustaw na 1, jeśli nowy pracownik nie może zostać utworzony na tym planowniku. Zazwyczaj dzieje się to z powodu ograniczeń pamięciowych. Jest dopuszczana wartość null.
active_worker_address varbinary(8) Adres pamięci pracownika, który jest aktywny. Jest dopuszczana wartość null. Więcej informacji można znaleźć w sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Adres pamięci obiektu pamięci planisty. Nie jest UNIEWAŻNIALNE.
task_memory_object_address varbinary(8) Adres pamięci obiektu pamięci zadania. Nie jest nullowalny. Więcej informacji można znaleźć w sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Zidentyfikowane tylko do celów informacyjnych. Niewspierane. Zgodność w przyszłości nie jest gwarantowana. Ujawnia kwantowy system planowania używany przez SQLOS.
total_cpu_usage_ms bigint Dotyczy do: SQL Server 2016 (13.x) i nowszych

Całkowite zużycie CPU przez ten harmonogram, raportowane przez pracowników niepreemptywnych. Nie jest nullowalny.
total_cpu_idle_capped_ms bigint Zidentyfikowane tylko do celów informacyjnych. Niewspierane. Zgodność w przyszłości nie jest gwarantowana. Wskazuje throttling na podstawie celu poziomu usługi, zawsze będzie 0 dla wersji SQL Server spoza Azure. Jest dopuszczana wartość null.
total_scheduler_delay_ms bigint Dotyczy do: SQL Server 2016 (13.x) i nowszych

Czas między zmianą jednego pracownika a wejściem drugiego. Może to być spowodowane opóźnieniem harmonogramowania kolejnego pracownika niewywleczącego lub wątkami planowania innych procesów przez system operacyjny. Nie jest nullowalny.
ideal_workers_limit int Dotyczy do: SQL Server 2019 (15.x) i nowszych

Ilu pracowników powinno być idealnie na harmonogramie? Jeśli obecni pracownicy przekroczą limit z powodu niezrównoważonego obciążenia zadania, po stanie się bezczynni, zostaną obcięci. Nie jest nullowalny.
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.

Permissions

W programie SQL Server i usłudze SQL Managed Instance wymagane jest VIEW SERVER STATE uprawnienie.

W przypadku celów usługi SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Uprawnienia dla programu SQL Server 2022 i nowszych

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

Przykłady

A. Monitorowanie ukrytych i nieukrytych harmonogramów

Poniższe zapytanie generuje stan pracowników i zadań w SQL Server we wszystkich planistach. To zapytanie zostało wykonane na systemie komputerowym, który posiada następujące cechy:

  • Dwa procesory (CPU)

  • Dwa węzły (NUMA)

  • Jeden procesor na każdy węzeł NUMA

  • Maska powinowactwa ustawiona na 0x03.

SELECT  
    scheduler_id,  
    cpu_id,  
    parent_node_id,  
    current_tasks_count,  
    runnable_tasks_count,  
    current_workers_count,  
    active_workers_count,  
    work_queue_count  
  FROM sys.dm_os_schedulers;  

Oto zestaw wyników.

scheduler_id cpu_id parent_node_id current_tasks_count  
------------ ------ -------------- -------------------  
0            1      0              9                    
257          255    0              1                    
1            0      1              10                   
258          255    1              1                    
255          255    32             2                    
  
runnable_tasks_count current_workers_count  
-------------------- ---------------------  
0                    11                     
0                    1                      
0                    18                     
0                    1                      
0                    3                      
  
active_workers_count work_queue_count  
-------------------- --------------------  
6                    0  
1                    0  
8                    0  
1                    0  
1                    0  

Wynik dostarcza następujących informacji:

  • Jest pięciu planistów. Dwa planery mają wartość < ID 1048576. Planowniki z ID >= 1048576 znane są jako ukryte planisty. Scheduler 255 reprezentuje dedykowane połączenie administratora (DAC). Na każdą instancję jest jeden planer DAC. Monitory zasobów koordynujące ciśnienie pamięci używają schedulera 257 i schedulera 258, po jednym na każdy węzeł NUMA

  • W wyjściu znajduje się 23 aktywne zadania. Zadania te obejmują żądania użytkowników oraz zadania zarządzania zasobami, które zostały rozpoczęte przez SQL Server. Przykładami zadań SQL Server są RESOURCE MONITOR (jeden na węzeł NUMA), LAZY WRITER (jeden na węzeł NUMA), LOCK MONITOR, CHECKPOINT oraz LOG WRITER.

  • Węzeł 0 NUMA jest mapowany na CPU 1 , a węzeł 1 NUMA na CPU 0. SQL Server zazwyczaj zaczyna się na węźle NUMA innym niż węzeł 0.

  • Przy returnie runnable_tasks_count0nie ma aktywnie działających zadań. Jednak mogą istnieć aktywne sesje.

  • Planista 255 reprezentujący DAC ma 3 powiązanych pracowników. Ci pracownicy są przydzielani przy starcie SQL Server i nie zmieniają się. Ci pracownicy są wykorzystywani wyłącznie do przetwarzania zapytań DAC. Dwa zadania na tym planiście reprezentują menedżera połączeń oraz pracownika bezczynności.

  • active_workers_count reprezentuje wszystkich pracowników, którzy mają powiązane zadania i działają w trybie nie-preemptywnym. Niektóre zadania, takie jak nasłuchiwacze sieciowe, działają w ramach prewencyjnego harmonogramowania.

  • Ukryte harmonogramy nie przetwarzają typowych żądań użytkowników. Wyjątkiem jest planator DAC. Ten planista DAC ma jeden wątek do przetwarzania żądań.

B. Monitorowanie nieukrytych harmonogramów w zatłoczonym systemie

Poniższe zapytanie pokazuje stan mocno obciążonych nieukrytych planistów, gdzie istnieje więcej żądań, niż jest w stanie obsłużyć dostępnych pracowników. W tym przykładzie 256 pracownikom przydziela się zadania. Niektóre zadania to oczekiwanie na przydział dla pracownika. Niższa liczba możliwych do uruchomienia oznacza, że wiele zadań czeka na zasób.

Uwaga / Notatka

Możesz sprawdzić stan pracowników, zadając sys.dm_os_workers. Więcej informacji można znaleźć w sys.dm_os_workers (Transact-SQL).

Oto pytanie:

SELECT  
    scheduler_id,  
    cpu_id,  
    current_tasks_count,  
    runnable_tasks_count,  
    current_workers_count,  
    active_workers_count,  
    work_queue_count  
  FROM sys.dm_os_schedulers  
  WHERE scheduler_id < 255;  

Oto zestaw wyników.

scheduler_id current_tasks_count runnable_tasks_count  
------------ ------------------- --------------------  
0            144                 0                     
1            147                 1                     
  
current_workers_count active_workers_count work_queue_count  
--------------------- -------------------- --------------------  
128                   125                  16  
128                   126                  19  

Dla porównania, poniższy wynik pokazuje wiele możliwych do wykonania zadań, w których żadne zadanie nie czeka na pozyskanie pracownika. To jest dla 0 obu osób zajmujących work_queue_count się harmonogramem.

scheduler_id current_tasks_count runnable_tasks_count  
------------ ------------------- --------------------  
0            107                 98                    
1            110                 100                   
  
current_workers_count active_workers_count work_queue_count  
--------------------- -------------------- --------------------  
128                   104                  0  
128                   108                  0  

Zobacz także

Dynamiczne widoki zarządzania związane z systemem operacyjnym PROGRAMU SQL Server (Transact-SQL)