sys.dm_os_schedulers (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Returnerar en rad per schemaläggare i SQL Server där varje schemaläggare mappas till en enskild processor. Använd den här vyn för att övervaka status för en schemaläggare eller för att identifiera okontrollerade uppgifter. För mer information om schemaläppare, se Tråd- och uppgiftsarkitekturguiden.

Anmärkning

För att kalla detta från Azure Synapse Analytics eller Analytics Platform System (PDW), använd namnet sys.dm_pdw_nodes_os_schedulers. Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Kolumnnamn Datatyp Description
scheduler_address varbinary(8) Minnesadressen till schemaläggaren. Får inte vara ogiltig.
parent_node_id int ID:t för noden som schemaläggaren tillhör, även kallat föräldranoden. Detta representerar en icke-uniform minnesåtkomstnod (NUMA). Får inte vara ogiltig.
schemaläggar-id int ID för schemaläggaren. Alla schemaläggare som används för att köra vanliga frågor har ID-nummer mindre än 1048576. De schemaläggare som har ID större än eller lika med 1048576 används internt av SQL Server, såsom den dedikerade administratörsanslutningsschemaläggaren. Får inte vara ogiltig.
cpu_id smallint CPU-ID tilldelat schemaläggaren.

Får inte vara ogiltig.

Notera: 255 indikerar inte någon affinitet som det gjorde i SQL Server 2005 (9.x). Se sys.dm_os_threads (Transact-SQL) för ytterligare affinitetsinformation.
status nvarchar(60) Indikerar statusen för schemaläggaren. Kan vara något av följande värden:

- DOLD ONLINE
- DOLD OFFLINE
- SYNLIGT ONLINE
- SYNLIGT OFFLINE
- VISIBLE ONLINE (DAC)
- HOT_ADDED

Får inte vara ogiltig.

DOLDA schemaläggare används för att behandla förfrågningar som är interna i databasmotorn. VISIBLE-schemaläggare används för att behandla användarförfrågningar.

OFFLINE-schemaläggare mappar till processorer som är offline i affinitetsmasken och används därför inte för att behandla några förfrågningar. ONLINE-schemaläggare mappar till processorer som är online i affinitetsmasken och är tillgängliga för att bearbeta trådar.

DAC indikerar att schemaläggaren körs under en dedikerad administratörsanslutning.

HOT ADDED indikerar att schemaläggarna lades till som svar på en hot add CPU-händelse.
is_online bit Om SQL Server är konfigurerad att endast använda några av de tillgängliga processorerna på servern kan denna konfiguration innebära att vissa schemaläggare mappas till processorer som inte ingår i affinitetsmasken. Om så är fallet returnerar denna kolumn 0. Detta värde innebär att schemaläpparen inte används för att bearbeta frågor eller batcher.

Får inte vara ogiltig.
is_idle bit 1 = Schemaläggaren är inaktiv. Inga arbetare är i drift just nu. Får inte vara ogiltig.
preemptive_switches_count int Antal gånger som arbetare på denna schemaläggare har bytt till förebyggande läge.

För att köra kod utanför SQL Server (till exempel utökade lagrade procedurer och distribuerade frågor) måste en tråd köras utanför den icke-förebyggande schemaläggarens kontroll. För att göra detta växlar en arbetare till förebyggande läge.
context_switches_count int Antal kontextbyten som har skett på denna schemaläggare. Får inte vara ogiltig.

För att tillåta andra arbetare att köra måste den nuvarande arbetande arbetaren släppa kontrollen över schemaläggaren eller byta kontext.

Not: Om en arbetare ger schemaläggaren och lägger sig själv i den körbara kön och sedan inte hittar några andra arbetare, väljer arbetaren sig själv. I detta fall uppdateras inte context_switches_count, men yield_count uppdateras.
idle_switches_count int Antal gånger har schemaläggaren väntat på ett evenemang medan den varit inaktiv. Denna kolumn liknar context_switches_count. Får inte vara ogiltig.
current_tasks_count int Antal aktuella uppgifter som är kopplade till denna schemaläggare. Denna räkning inkluderar följande:

- Uppgifter som väntar på att en arbetare ska utföra dem.
- Uppgifter som för närvarande väntar eller körs (i SUSPENDERAT eller RUNNBART).

När en uppgift är slutförd minskas denna räkning. Får inte vara ogiltig.
runnable_tasks_count int Antal arbetare, med uppgifter tilldelade dem, som väntar på att schemaläggas i den körbara kön. Får inte vara ogiltig.
current_workers_count int Antal arbetare som är kopplade till denna schemaläggare. Denna räkning inkluderar arbetare som inte tilldelats någon uppgift. Får inte vara ogiltig.
active_workers_count int Antal aktiva arbetare. En aktiv arbetare är aldrig preemptiv, måste ha en tillhörande uppgift och är antingen körbar, körbar eller avstängd. Får inte vara ogiltig.
work_queue_count bigint Antal uppgifter i den väntande kön. Dessa uppgifter är att vänta på att en arbetare ska hämta dem. Får inte vara ogiltig.
pending_disk_io_count int Antal pågående I/O:n som väntar på att slutföras. Varje schemaläggare har en lista över väntande I/O:er som kontrolleras för att avgöra om de har slutförts varje gång det sker ett kontextbyte. Antalet ökar när förfrågan infogas. Denna räkning minskas när begäran är slutförd. Detta nummer anger inte tillståndet för I/O:na. Får inte vara ogiltig.
load_factor int Internt värde som anger den upplevda belastningen på denna schemaläggare. Detta värde används för att avgöra om en ny uppgift ska läggas till denna schemaläggare eller en annan schemaläggare. Detta värde är användbart för felsökning när det verkar som att schemaläggare inte är jämnt belastade. Routingbeslutet fattas baserat på belastningen på schemaläggaren. SQL Server använder också en belastningsfaktor för noder och schemaläggare för att hjälpa till att bestämma den bästa platsen att skaffa resurser. När en uppgift är i kö ökar belastningsfaktorn. När en uppgift är slutförd minskar belastningsfaktorn. Att använda belastningsfaktorerna hjälper SQL Server OS att balansera arbetsbelastningen bättre. Får inte vara ogiltig.
yield_count int Internt värde som används för att indikera framsteg på denna schemaläggare. Detta värde används av schemaläggarövervakaren för att avgöra om en arbetare på schemaläggaren inte ger vika för andra arbetare i tid. Detta värde indikerar inte att arbetaren eller uppgiften har övergått till en ny arbetstagare. Får inte vara ogiltig.
last_timer_activity bigint I CPU-ticks kontrollerades den senaste gången schemaläggaren kontrollerade av schemaläggaren. Får inte vara ogiltig.
failed_to_create_worker bit Sätt till 1 om en ny arbetare inte kunde skapas i denna schemaläggare. Detta sker vanligtvis på grund av minnesbegränsningar. Kan inte vara null.
active_worker_address varbinary(8) Minnesadressen till den arbetare som för närvarande är aktiv. Kan inte vara null. För mer information, se sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Minnesadressen till schemaläpparens minnesobjekt. Inte NULLBAR.
task_memory_object_address varbinary(8) Minnesadressen till uppgiftsminnesobjektet. Får inte vara ogiltig. För mer information, se sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Identifieras endast i informationssyfte. Stöds inte. Framtida kompatibilitet garanteras inte. Exponerar schemaljar-kvanten som används av SQLOS.
total_cpu_usage_ms bigint Gäller för: SQL Server 2016 (13.x) och senare

Total CPU förbrukad av denna schemaläggare enligt rapportering av icke-preemptiva arbetare. Får inte vara ogiltig.
total_cpu_idle_capped_ms bigint Identifieras endast i informationssyfte. Stöds inte. Framtida kompatibilitet garanteras inte. Indikerar strypning baserat på Service Level Objective, kommer alltid att vara 0 för icke-Azure-versioner av SQL Server. Kan inte vara null.
total_scheduler_delay_ms bigint Gäller för: SQL Server 2016 (13.x) och senare

Tiden mellan att en arbetare byter ut och en annan byter in. Kan orsakas av att preemptiva arbetare fördröjer schemaläggningen av nästa icke-preemptiva arbetare, eller på grund av att OS-schemaläggningstrådar från andra processer. Får inte vara ogiltig.
ideal_workers_limit int Gäller för: SQL Server 2019 (15.x) och senare

Hur många arbetare bör helst finnas på schemaläggningsprogrammet. Om de nuvarande arbetarna överskrider gränsen på grund av obalanserad arbetsbelastning, kommer de att trimmas när de blir inaktiva. Får inte vara ogiltig.
pdw_node_id int gäller för: Azure Synapse Analytics, Analytics Platform System (PDW)

Identifieraren för noden som den här fördelningen är på.

Permissions

På SQL Server och SQL Managed Instance kräver VIEW SERVER STATE behörighet.

I SQL Database Grundläggande, S0och S1 tjänstmål och för databaser i elastiska pooler, serveradministratör konto, Microsoft Entra-administratör konto eller medlemskap i ##MS_ServerStateReader##serverrollen krävs. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE behörighet för databasen eller medlemskap i ##MS_ServerStateReader## serverrollen.

Behörigheter för SQL Server 2022 och senare

Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.

Examples

A. Övervakning av dolda och icke-dolda schemaläggare

Följande fråga ger tillstånd för arbetare och uppgifter i SQL Server över alla schemaläggare. Denna fråga utfördes på ett datorsystem som har följande:

  • Två processorer (CPU:er)

  • Två (NUMA) noder

  • En CPU per NUMA-nod

  • Affinitetsmask satt till 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;  

Här är resultatet.

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  

Utdata ger följande information:

  • Det finns fem schemaläggare. Två schemaläggare har ett ID-värde < 1048576. Schemaläggare med ID >= 1048576 kallas dolda schemaläggare. Schemaläggaren 255 representerar den dedikerade administratörsanslutningen (DAC). Det finns en DAC-schemaläppare per instans. Resursövervakare som koordinerar minnestryck använder schemaläggare 257 och schemaläggare 258, en per NUMA-nod

  • Det finns 23 aktiva uppgifter i utdatan. Dessa uppgifter inkluderar användarförfrågningar utöver resurshanteringsuppgifter som har startats av SQL Server. Exempel på SQL Server-uppgifter är RESOURCE MONITOR (en per NUMA-nod), LAZY WRITER (en per NUMA-nod), LOCK MONITOR, CHECKPOINT och LOG WRITER.

  • NUMA-noden 0 mappas till CPU 1 och NUMA-noden 1 mappas till CPU 0. SQL Server startar vanligtvis på en NUMA-nod som inte är nod 0.

  • Med runnable_tasks_count återkommande 0, finns inga aktivt igångande uppgifter. Dock kan aktiva sessioner finnas.

  • Schemaläggaren 255 som representerar DAC har 3 arbetare kopplade till sig. Dessa arbetare tilldelas vid SQL Server-start och ändras inte. Dessa arbetare används endast för att bearbeta DAC-frågor. De två uppgifterna i denna schemaläggare representerar en anslutningshanterare och en inaktiv arbetare.

  • active_workers_count representerar alla arbetare som har tillhörande uppgifter och körs i icke-preemptivt läge. Vissa uppgifter, såsom nätverkslyssnare, körs under preemptiv schemaläggning.

  • Dolda schemaläggare behandlar inte typiska användarförfrågningar. DAC-schemaläggaren är undantaget. Denna DAC-schemaläggare har en tråd för att behandla förfrågningar.

B. Övervakning av icke-dolda schemaläggare i ett upptaget system

Följande fråga visar tillståndet för tungt belastade icke-dolda schemaläggare, där fler förfrågningar finns än vad som kan hanteras av tillgängliga arbetare. I detta exempel tilldelas 256 arbetare uppgifter. Vissa uppgifter är att vänta på en uppgift till en arbetare. Lägre körbar körning innebär att flera uppgifter väntar på en resurs.

Anmärkning

Du kan ta reda på arbetstagarnas tillstånd genom att fråga sys.dm_os_workers. För mer information, se sys.dm_os_workers (Transact-SQL).

Här är frågan:

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;  

Här är resultatet.

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  

Som jämförelse visar följande resultat flera körbara uppgifter där ingen uppgift väntar på att få en arbetare. Det gäller work_queue_count0 båda schemaläggarna.

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  

Se även

SQL Server-operativsystemrelaterade dynamiska hanteringsvyer (Transact-SQL)