Delen via


sys.dm_os_schedulers (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Retourneert één rij per scheduler in SQL Server waarbij elke scheduler is toegewezen aan een afzonderlijke processor. Gebruik deze weergave om de toestand van een planner te bewaken of om uit de hand gelopen taken te identificeren. Voor meer informatie over planners, zie de Thread and Task Architecture Guide.

Opmerking

Om dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW), gebruik de naam sys.dm_pdw_nodes_os_schedulers. Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Kolomnaam Gegevenstype Description
scheduler_address varbinary(8) Geheugenadres van de planner. Is niet nulbaar.
parent_node_id int ID van de knoop waartoe de planner behoort, ook wel de ouderknoop genoemd. Dit vertegenwoordigt een niet-uniform geheugentoegangsknooppunt (NUMA). Is niet nulbaar.
scheduler_id int ID van de planner. Alle planners die worden gebruikt om reguliere queries uit te voeren, hebben ID-nummers kleiner dan 1048576. Die schedulers met IDs groter dan of gelijk aan 1048576 worden intern gebruikt door SQL Server, zoals de dedicated administrator connection scheduler. Is niet nulbaar.
cpu_id smallint CPU-ID toegewezen aan de scheduler.

Is niet nulbaar.

Opmerking: 255 geeft geen affiniteit aan zoals in SQL Server 2005 (9.x). Zie sys.dm_os_threads (Transact-SQL) voor aanvullende informatie over affiniteit.
status nvarchar(60) Geeft de status van de planner aan. Dit kan een van de volgende waarden zijn:

- VERBORGEN ONLINE
- VERBORGEN OFFLINE
- ZICHTBAAR ONLINE
- ZICHTBAAR OFFLINE
- ZICHTBAAR ONLINE (DAC)
- HOT_ADDED

Is niet nulbaar.

HIDDEN schedulers worden gebruikt om verzoeken te verwerken die intern zijn in de Database Engine. VISIBLE-planners worden gebruikt om gebruikersverzoeken te verwerken.

OFFLINE planners worden gekoppeld aan processors die offline zijn in het affiniteitsmasker en worden daarom niet gebruikt om verzoeken te verwerken. ONLINE planners worden gekoppeld aan processors die online zijn in het affiniteitsmasker en zijn beschikbaar om threads te verwerken.

DAC geeft aan dat de scheduler draait onder een speciale beheerdersverbinding.

HOT ADDED geeft aan dat de schedulers zijn toegevoegd als reactie op een hot add CPU-gebeurtenis.
is_online bit Als SQL Server is geconfigureerd om slechts enkele van de beschikbare processors op de server te gebruiken, kan deze configuratie betekenen dat sommige planners worden gekoppeld aan processors die niet in het affiniteitsmasker zitten. Als dat het geval is, geeft deze kolom 0 terug. Deze waarde betekent dat de scheduler niet wordt gebruikt om queries of batches te verwerken.

Is niet nulbaar.
is_idle bit 1 = Scheduler is inactief. Er zijn momenteel geen arbeiders actief. Is niet nulbaar.
preemptive_switches_count int Aantal keren dat werknemers op deze scheduler zijn overgeschakeld naar de preëmptieve modus.

Als u code wilt uitvoeren die zich buiten SQL Server bevindt (bijvoorbeeld uitgebreide opgeslagen procedures en gedistribueerde query's), moet een thread buiten het beheer van de niet-preventieve scheduler worden uitgevoerd. Hiervoor schakelt een werkrol over naar de voorlopige modus.
context_switches_count int Aantal contextwisselingen die op deze scheduler hebben plaatsgevonden. Is niet nulbaar.

Om andere werknemers te laten draaien, moet de huidige werknemer de controle over de planner of de wisselcontext loslaten.

Notitie: Als een worker de scheduler oplevert en zichzelf in de runnable queue plaatst en vervolgens geen andere workers vindt, selecteert de worker zichzelf. In dat geval wordt de context_switches_count niet bijgewerkt, maar de yield_count wel.
idle_switches_count int Aantal keren dat de planner op een evenement wacht terwijl hij inactief was. Deze column lijkt op context_switches_count. Is niet nulbaar.
current_tasks_count int Aantal huidige taken die aan deze scheduler zijn gekoppeld. Deze telling omvat het volgende:

- Taken die wachten tot een werknemer ze uitvoert.
- Taken die momenteel wachten of draaien (in SUSPENDEERDE of RUNNABLE toestand).

Wanneer een taak is voltooid, wordt dit aantal verminderd. Is niet nulbaar.
runnable_tasks_count int Aantal werknemers, met taken toegewezen aan hen, die wachten om in de runnable queue gepland te worden. Is niet nulbaar.
current_workers_count int Aantal werknemers dat aan deze planner is gekoppeld. Dit aantal omvat werknemers die geen taak toegewezen krijgen. Is niet nulbaar.
active_workers_count int Aantal actieve werknemers. Een actieve werker is nooit preëmptief, moet een bijbehorende taak hebben en is ofwel actief, uitvoerbaar of opgeschort. Is niet nulbaar.
work_queue_count bigint Aantal taken in de wachtrij. Deze taken zijn wachten tot een medewerker ze ophaalt. Is niet nulbaar.
pending_disk_io_count int Aantal lopende I/O's die wachten om afgerond te worden. Elke scheduler heeft een lijst met lopende I/O's die worden gecontroleerd om te bepalen of ze zijn voltooid telkens wanneer er een contextwissel plaatsvindt. Het aantal wordt verhoogd wanneer het verzoek wordt ingevoegd. Deze telling wordt verlaagd wanneer het verzoek is afgerond. Dit nummer geeft niet de status van de I/O's aan. Is niet nulbaar.
load_factor int Interne waarde die de waargenomen belasting op deze planner aangeeft. Deze waarde wordt gebruikt om te bepalen of een nieuwe taak op deze planner of een andere planner moet worden geplaatst. Deze waarde is nuttig voor debuggingdoeleinden wanneer het lijkt dat schedulers niet gelijkmatig geladen zijn. De routeringsbeslissing wordt genomen op basis van de belasting van de planner. SQL Server gebruikt ook een load factor van nodes en schedulers om te helpen de beste locatie te bepalen om resources te verkrijgen. Wanneer een taak in de wachtrij staat, wordt de belastingsfactor verhoogd. Wanneer een taak is voltooid, wordt de belastingsfactor verlaagd. Het gebruik van de belastingsfactoren helpt om SQL Server OS de werklast beter in balans te brengen. Is niet nulbaar.
yield_count int Interne waarde die wordt gebruikt om voortgang van deze scheduler aan te geven. Deze waarde wordt door de Scheduler Monitor gebruikt om te bepalen of een werknemer op de scheduler niet op tijd voorrang geeft aan andere werknemers. Deze waarde geeft niet aan dat de werknemer of taak is overgestapt naar een nieuwe werker. Is niet nulbaar.
last_timer_activity bigint In CPU-ticks werd de laatste keer dat de scheduler timer-wachtrij door de scheduler gecontroleerd is. Is niet nulbaar.
failed_to_create_worker bit Zet op 1 als er geen nieuwe werker op deze planner kan worden aangemaakt. Dit gebeurt meestal door geheugenbeperkingen. Is null-waarde.
active_worker_address varbinary(8) Geheugenadres van de werker die momenteel actief is. Is null-waarde. Voor meer informatie, zie sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Geheugenadres van het scheduler-geheugenobject. Niet ONVERSTOORBAAR.
task_memory_object_address varbinary(8) Geheugenadres van het taakgeheugenobject. Is niet nulbaar. Voor meer informatie, zie sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd. Maakt de scheduler quantum bloot die door SQLOS wordt gebruikt.
total_cpu_usage_ms bigint Van toepassing op: SQL Server 2016 (13.x) en later

Totale CPU-verbruik door deze scheduler zoals gerapporteerd door niet-preëmptieve werknemers. Is niet nulbaar.
total_cpu_idle_capped_ms bigint Alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd. Geeft aan dat throttling gebaseerd is op het Service Level Objective, zal altijd 0 zijn voor niet-Azure-versies van SQL Server. Is null-waarde.
total_scheduler_delay_ms bigint Van toepassing op: SQL Server 2016 (13.x) en later

De tijd tussen de wissel van de ene werknemer en de andere die overstapt. Kan worden veroorzaakt doordat preëmptieve werknemers de planning van de volgende niet-preëmptieve werker uitstellen, of door de OS-planningsthreads van andere processen. Is niet nulbaar.
ideal_workers_limit int Van toepassing op: SQL Server 2019 (15.x) en later

Hoeveel werknemers er idealiter op de planner moeten staan? Als de huidige werknemers de limiet overschrijden door een onevenwichtige taakbelasting, worden ze zodra ze inactief worden teruggetrimd. Is niet nulbaar.
pdw_node_id int van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

De id voor het knooppunt waarop deze distributie zich bevindt.

Permissions

Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .

Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.

Machtigingen voor SQL Server 2022 en hoger

Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Voorbeelden

Eén. Monitoring van verborgen en niet-verborgen planners

De volgende query geeft de status van workers en taken in SQL Server voor alle schedulers weer op. Deze query werd uitgevoerd op een computersysteem dat het volgende heeft:

  • Twee processoren (CPU's)

  • Twee (NUMA) knopen

  • Eén CPU per NUMA-knoop

  • Affiniteitsmasker ingesteld op 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;  

Hier is het resultatenoverzicht.

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  

De output geeft de volgende informatie:

  • Er zijn vijf planners. Twee planners hebben een ID-waarde < 1048576. Schedulers met ID >= 1048576 staan bekend als hidden schedulers. Scheduler 255 vertegenwoordigt de dedicated administrator-verbinding (DAC). Er is per instantie één DAC-scheduler. Resourcemonitors die geheugendruk coördineren, gebruiken scheduler 257 en scheduler 258, één per NUMA-knoop

  • Er zijn 23 actieve taken in de output. Deze taken omvatten gebruikersverzoeken naast resource management-taken die door SQL Server zijn gestart. Voorbeelden van SQL Server-taken zijn RESOURCE MONITOR (één per NUMA-node), LAZY WRITER (één per NUMA-node), LOCK MONITOR, CHECKPOINT en LOG WRITER.

  • NUMA-knoop 0 wordt toegewezen aan CPU 1 en NUMA-knoop 1 aan CPU 0. SQL Server begint doorgaans op een NUMA-knoop die niet bij knooppunt 0 voorkomt.

  • Met terugkerend runnable_tasks_count0werk zijn er geen actieve taken. Er kunnen echter actieve sessies bestaan.

  • De scheduler 255 die DAC vertegenwoordigt, heeft werknemers die eraan gekoppeld zijn 3 . Deze werknemers worden toegewezen aan het opstarten van SQL Server en veranderen niet. Deze werkers worden alleen gebruikt om DAC-queries te verwerken. De twee taken op deze planner vertegenwoordigen een verbindingsmanager en een idle worker.

  • active_workers_count vertegenwoordigt alle werknemers die bijbehorende taken hebben en in niet-preëmptieve modus draaien. Sommige taken, zoals netwerkluisteraars, worden uitgevoerd onder preëmpieve planning.

  • Verborgen planners verwerken de gebruikelijke gebruikersverzoeken niet. De DAC-scheduler is de uitzondering. Deze DAC-scheduler heeft één thread om verzoeken te verwerken.

B. Monitoring van niet-verborgen planners in een druk systeem

De volgende query toont de staat van zwaar belaste niet-verborgen planners, waarbij er meer verzoeken zijn dan door beschikbare werkers kunnen worden afgehandeld. In dit voorbeeld krijgen 256 werknemers taken toegewezen. Sommige taken zijn wachten op een opdracht aan een werknemer. Een lager aantal runnable taken betekent dat meerdere taken wachten op een resource.

Opmerking

Je kunt de toestand van de werknemers achterhalen door sys.dm_os_workers te vragen. Voor meer informatie, zie sys.dm_os_workers (Transact-SQL).

Hier is de query:

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;  

Hier is het resultatenoverzicht.

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  

Ter vergelijking: het volgende resultaat toont meerdere uitvoerbare taken waarbij geen enkele taak wacht om een worker te verkrijgen. Het work_queue_count is 0 voor beide planners.

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  

Zie ook

Dynamische beheerweergaven van SQL Server-besturingssysteem (Transact-SQL)