Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
255reprezentuje dedykowane połączenie administratora (DAC). Na każdą instancję jest jeden planer DAC. Monitory zasobów koordynujące ciśnienie pamięci używają schedulera257i schedulera258, po jednym na każdy węzeł NUMAW 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ł
0NUMA jest mapowany na CPU1, a węzeł1NUMA na CPU0. 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
255reprezentujący DAC ma3powią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_countreprezentuje 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)