Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
255vertegenwoordigt de dedicated administrator-verbinding (DAC). Er is per instantie één DAC-scheduler. Resourcemonitors die geheugendruk coördineren, gebruiken scheduler257en scheduler258, één per NUMA-knoopEr 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
0wordt toegewezen aan CPU1en NUMA-knoop1aan CPU0. 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
255die DAC vertegenwoordigt, heeft werknemers die eraan gekoppeld zijn3. 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_countvertegenwoordigt 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)