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
Vrátí jeden řádek na každý plánovač v SQL Serveru, kde je každý plánovač namapován na jednotlivý procesor. Toto zobrazení slouží ke sledování stavu plánovače nebo k identifikaci neovladatelných úloh. Pro více informací o plánovačí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_schedulers. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.
| Název sloupce | Datový typ | Description |
|---|---|---|
| scheduler_address | varbinary(8) | Paměťová adresa plánovače. Není možné nastavit jako null. |
| parent_node_id | int | ID uzlu, ke kterému plánovač patří, známého také jako nadřazený uzel. To představuje uzel neuniformního přístupu do paměti (NUMA). Není možné nastavit jako null. |
| ID plánovače | int | ID plánovače. Všechny plánovače, které se používají k běžným dotazům, mají ID čísla menší než 1048576. Plánovače, které mají ID větší nebo rovné 1048576, jsou interně používány SQL Serverem, například dedikovaný správce plánovače připojení připojení. Není možné nastavit jako null. |
| cpu_id | smallint | CPU ID přiřazené plánovači. Není možné nastavit jako null. Poznámka: 255 neznamená žádnou afinitu, jako tomu bylo v SQL Server 2005 (9.x). Další informace o afinitě najdete v sys.dm_os_threads (Transact-SQL ). |
| stav | nvarchar(60) | Ukazuje stav plánovače. Může to být jedna z následujících hodnot: - SKRYTÉ ONLINE - SKRYTÉ OFFLINE - VIDITELNÉ ONLINE - VIDITELNÉ OFFLINE - VISIBLE ONLINE (DAC) - HOT_ADDED Není možné nastavit jako null. HIDDEN plánovače se používají ke zpracování požadavků, které jsou interní v databázovém enginu. Plánovače VISIBLE se používají ke zpracování uživatelských požadavků. OFFLINE plánovače mapují na procesory, které jsou offline v afinitní masce, a proto nejsou používány ke zpracování žádných požadavků. ONLINE plánovače mapují na procesory, které jsou online v afinitní masce a jsou dostupné pro zpracování vláken. DAC označuje, že plánovač běží pod dedikovaným administrátorským připojením. HOT ADDED znamená, že plánovače byly přidány v reakci na událost CPU při hot add. |
| is_online | bit | Pokud je SQL Server nakonfigurován tak, aby používal pouze některé dostupné procesory na serveru, může tato konfigurace znamenat, že některé plánovače jsou mapovány na procesory, které nejsou v afinitní masce. Pokud je tomu tak, tento sloupec vrací 0. Tato hodnota znamená, že plánovač není používán ke zpracování dotazů nebo dávek. Není možné nastavit jako null. |
| is_idle | bit | 1 = Plánovač je nečinný. Momentálně žádní pracovníci nepracují. Není možné nastavit jako null. |
| preemptive_switches_count | int | Počet případů, kdy pracovníci na tomto plánovači přešli do režimu předběžného převzetí. Pokud chcete spustit kód, který je mimo SQL Server (například rozšířené uložené procedury a distribuované dotazy), musí vlákno provést mimo kontrolu ne preemptivního plánovače. K tomu se pracovní proces přepne do preemptivního režimu. |
| context_switches_count | int | Počet přepnutí kontextu, které na tomto plánovači nastalo. Není možné nastavit jako null. Aby mohli běžet i další pracovníci, musí současný pracovník vzdát se kontroly nad plánovačem nebo přepnout kontext. Poznámka: Pokud pracovník vrátí plánovač a vloží se do běžitelné fronty a pak nenajde žádné další pracovníky, pracovník se vybere sám. V tomto případě se context_switches_count neaktualizuje, ale yield_count ano. |
| idle_switches_count | int | Kolikrát plánovač čekal na událost v nečinnosti. Tento sloupek je podobný context_switches_count. Není možné nastavit jako null. |
| current_tasks_count | int | Počet aktuálních úkolů, které jsou s tímto plánovačem spojeny. Tento počet zahrnuje následující: - Úkoly, které čekají na pracovníka, aby je provedl. - Úkoly, které jsou aktuálně čekající nebo běžící (ve stavu POZASTAVENO nebo BĚŽITELNÉ). Po dokončení úkolu se tento počet snižuje. Není možné nastavit jako null. |
| runnable_tasks_count | int | Počet pracovníků, s přiřazenými úkoly, kteří čekají na zařazení do běžné fronty. Není možné nastavit jako null. |
| current_workers_count | int | Počet pracovníků spojených s tímto plánovačem. Tento počet zahrnuje pracovníky, kterým není přiřazen žádný úkol. Není možné nastavit jako null. |
| active_workers_count | int | Počet aktivních pracovníků. Aktivní pracovník nikdy není předemptivní, musí mít přiřazený úkol a je buď v provozu, běžný nebo pozastavený. Není možné nastavit jako null. |
| work_queue_count | bigint | Počet úkolů ve frontě čekající. Tyto úkoly čekají, až je vyzvedne pracovník. Není možné nastavit jako null. |
| pending_disk_io_count | int | Počet čekajících I/O procesů, které čekají na dokončení. Každý plánovač má seznam čekajících I/O operací, které se kontrolují, zda byly dokončeny pokaždé, když dojde ke změně kontextu. Počet se zvyšuje při vložení požadavku. Tento počet se snižuje po dokončení žádosti. Toto číslo neukazuje stav I/O. Není možné nastavit jako null. |
| load_factor | int | Interní hodnota, která indikuje vnímané zatížení tohoto plánovače. Tato hodnota se používá k určení, zda by měl být nový úkol umístěn do tohoto plánovače nebo do jiného plánovače. Tato hodnota je užitečná pro ladění, když se zdá, že plánovače nejsou rovnoměrně načteny. Rozhodnutí o směrování se přijímá na základě zatížení plánovače. SQL Server také využívá load factor uzlů a plánovačů, aby pomohl určit nejlepší místo pro získávání zdrojů. Když je úkol zařazen do fronty, zvyšuje se faktor zatížení. Po dokončení úkolu se faktor zatížení sníží. Použití load factorů pomáhá OS SQL Server lépe vyvážit pracovní zátěž. Není možné nastavit jako null. |
| yield_count | int | Interní hodnota, která se používá k indikaci pokroku v tomto plánovači. Tuto hodnotu používá Scheduler Monitor k určení, zda pracovník na plánovači nepředvádí včas ostatním pracovníkům. Tato hodnota neznamená, že pracovník nebo úkol přešel na nového pracovníka. Není možné nastavit jako null. |
| last_timer_activity | bigint | Při CPU tickech je poslední kontrola, kdy plánovač kontroloval frontu časovače. Není možné nastavit jako null. |
| failed_to_create_worker | bit | Nastavte na 1, pokud nový pracovník nemohl být vytvořen v tomto plánovači. K tomu obvykle dochází kvůli omezením paměti. Je nullable. |
| active_worker_address | varbinary(8) | Paměťová adresa pracovníka, který je aktuálně aktivní. Je nullable. Pro více informací viz sys.dm_os_workers (Transact-SQL). |
| memory_object_address | varbinary(8) | Paměťová adresa paměťového objektu plánovače. Není to NULLABLE. |
| task_memory_object_address | varbinary(8) | Paměťová adresa objektu paměti úlohy. Není možné nastavit jako null. Pro více informací viz sys.dm_os_memory_objects (Transact-SQL). |
| quantum_length_us | bigint | Určeno pouze pro informační účely. Není podporováno. Budoucí kompatibilita není zaručena. Zpřístupňuje kvantové množství plánovače používané SQLOS. |
| total_cpu_usage_ms | bigint |
Platí na: SQL Server 2016 (13.x) a novější Celkový CPU spotřebovaný tímto plánovačem, jak je hlášeno ne-preventivními pracovníky. Není možné nastavit jako null. |
| total_cpu_idle_capped_ms | bigint | Určeno pouze pro informační účely. Není podporováno. Budoucí kompatibilita není zaručena. Označuje zpomalování podle Service Level Objective, u ne-Azure verzí SQL Serveru bude vždy 0. Je nullable. |
| total_scheduler_delay_ms | bigint |
Platí na: SQL Server 2016 (13.x) a novější Čas mezi tím, jak jeden pracovník přechází a druhý nastupuje. Může být způsobeno tím, že předběžní pracovníci zdržují plánování dalšího nepreemptivního pracovníka, nebo kvůli plánovacím vláknům operačního systému z jiných procesů. Není možné nastavit jako null. |
| ideal_workers_limit | int |
Platí na: SQL Server 2019 (15.x) a novější Kolik pracovníků by mělo být ideálně na plánovači. Pokud stávající pracovníci překročí limit kvůli nevyváženému zatížení úkolů, jakmile se stanou nečinnými, budou oříznuti. Není možné nastavit jako null. |
| pdw_node_id | int |
platí pro: Azure Synapse Analytics, Analytics Platform System (PDW) Identifikátor uzlu, na který je tato distribuce zapnutá. |
Povolení
Na SQL Serveru a službě SQL Managed Instance vyžaduje VIEW SERVER STATE oprávnění.
U cílů služby SQL Database Basic, S0 a S1 a pro databáze v elastických fondech se vyžaduje účet správce serveru , účet správce Microsoft Entra nebo členství v ##MS_ServerStateReader##roli serveru . U všech ostatních cílů VIEW DATABASE STATE služby SQL Database se vyžaduje buď oprávnění k databázi, nebo členství v ##MS_ServerStateReader## roli serveru.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.
Examples
A. Monitorování skrytých a neskrytých plánovačů
Následující dotaz vygeneruje stav pracovníků a úloh v SQL Serveru napříč všemi plánovači. Tento dotaz byl proveden na počítačovém systému, který má následující:
Dva procesory (CPU)
Dva (NUMA) uzly
Jeden CPU na každý uzel NUMA
Maska afinity nastavená 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;
Tady je soubor výsledků.
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
Výstup poskytuje následující informace:
Je pět plánovačů. Dva plánovače mají hodnotu < ID 1048576. Plánovače s ID >= 1048576 jsou známé jako skryté plánovače. Plánovač
255představuje připojení dedikovaného správce (DAC). Na každou instanci je jeden DAC plánovač. Monitory zdrojů, které koordinují tlak paměti, používají plánovač257a plánovač,258jeden na každý uzel NUMAVe výstupu je 23 aktivních úkolů. Tyto úkoly zahrnují uživatelské požadavky kromě úloh správy zdrojů, které byly zahájeny SQL Serverem. Příklady úloh SQL Serveru jsou RESOURCE MONITOR (jeden na každý NUMA uzel), LAZY WRITER (jeden na NUMA uzel), LOCK MONITOR, CHECKPOINT a LOG WRITER.
NUMA uzel
0je mapován na CPU1a NUMA1uzel na CPU0. SQL Server obvykle začíná na NUMA uzlu jiném než node 0.Při
runnable_tasks_countnávratu0neexistují aktivně běžící úlohy. Nicméně mohou existovat aktivní sezení.Plánovač
255reprezentující DAC má3pracovníky spojené. Tito pracovníci jsou přidělováni při spuštění SQL Serveru a nemění. Tito pracovníci jsou používáni pouze ke zpracování dotazů DAC. Dvě úlohy na tomto plánovači představují správce spojení a nečinného pracovníka.active_workers_countpředstavuje všechny pracovníky, kteří mají přiřazené úkoly a běží v nepreemptivním režimu. Některé úkoly, například síťové posluchače, běží na základě předběžného plánování.Skryté plánovače nezpracovávají typické uživatelské požadavky. Výjimkou je DAC plánovač. Tento DAC plánovač má jedno vlákno pro zpracování požadavků.
B. Monitorování neskrytých plánovačů v rušném systému
Následující dotaz ukazuje stav silně zatížených neskrytých plánovačů, kde existuje více požadavků, než kolik je zvládne dostupní pracovníci. V tomto příkladu je přiděleno 256 pracovníků. Některé úkoly čekají na přidělení pracovníkovi. Nižší počet spustitelných úkolů znamená, že na zdroj čeká více úkolů.
Poznámka:
Stav pracovníků zjistíte dotazem sys.dm_os_workers. Pro více informací viz sys.dm_os_workers (Transact-SQL).
Zde je dotaz:
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;
Tady je soubor výsledků.
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
Pro srovnání, následující výsledek ukazuje více spustitelných úloh, kde žádný úkol nečeká na získání pracovníka. To work_queue_count platí 0 pro oba plánovače.
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
Viz také
Zobrazení dynamické správy související s operačním systémem SQL Server (Transact-SQL)