Megosztás a következőn keresztül:


sys.dm_os_schedulers (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Ütemezőnként egy sort ad vissza az SQL Serveren, ahol minden ütemező egy egyéni processzorhoz van hozzárendelve. Ezzel a nézetben figyelheti az ütemező állapotát, vagy azonosíthatja az elszabadult feladatokat. További információért az ütemezőkről lásd a Thread és Task Architecture útmutatót.

Megjegyzés:

Ha ezt Azure Synapse Analytics vagy Analytics Platform System (PDW) néven nevezzük, használd a sys.dm_pdw_nodes_os_schedulers nevet. Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

Oszlop név Adattípus Description
scheduler_address varbinary(8) Az ütemező memóriacíme. Nem lehet null értékű.
parent_node_id int Az ütemező tartozó csomópont azonosítója, más néven a szülőcsomópont. Ez egy nem egységes memóriahozzáférési (NUMA) csomópontot képvisel. Nem lehet null értékű.
ütemező_azonosító int Az időzítő azonosítója. Minden rendszeres lekérdezéshez használt ütemező azonosító száma kevesebb, mint 1048576. Azokat az ütemezőket, amelyek azonosítója nagyobb, mint 1048576 vagy egyenlő, az SQL Server belsőleg használja, például a dedikált adminisztrátori kapcsolat-ütemezőt. Nem lehet null értékű.
cpu_id smallint CPU azonosító az ütemezőhöz van rendelve.

Nem lehet null értékű.

Megjegyzés: a 255 nem jelez affinitást, mint az SQL Server 2005 (9.x) esetében. További affinitásért lásd sys.dm_os_threads (Transact-SQL) oldalt.
állapot nvarchar(60) Jelzi az időzítő állapotát. Az alábbi értékek egyike lehet:

- REJTETT ONLINE
- REJTETT OFFLINE
- LÁTHATÓ ONLINE
- LÁTHATÓ OFFLINE
- LÁTHATÓ ONLINE (DAC)
- HOT_ADDED

Nem lehet null értékű.

A HIDDEN időzítők az adatbázis motorban belül lévő kérések feldolgozására szolgálnak. A VISIBLE ütemezőket használják a felhasználói kérések feldolgozására.

Az OFFLINE időszabók olyan processzorokhoz kapcsolódnak, amelyek az affinitásmaszkban offline vannak, ezért nem használják őket kérések feldolgozására. Az ONLINE időszervezők az affinitás maszkban működő processzorokhoz csatlakoznak, és elérhetők a szálak feldolgozására.

A DAC azt jelzi, hogy az osztazógép dedikált adminisztrátori kapcsolat alatt fut.

A HOT ADDED azt jelzi, hogy az ütemezőket egy forró hozzáadási CPU eseményre válaszul adták be.
is_online bit Ha az SQL Server csak néhány elérhető processzort használ a szerveren, ez azt jelentheti, hogy egyes ütemezőket olyan processzorokhoz képeznek, amelyek nem az affinitásmaszkban vannak. Ha ez így van, ez az oszlop 0-at ad vissza. Ez az érték azt jelenti, hogy az ütemeztetőt nem használják lekérdezések vagy csomagok feldolgozására.

Nem lehet null értékű.
is_idle bit 1 = Az ütemező üres. Jelenleg egyetlen dolgozó sem jár. Nem lehet null értékű.
preemptive_switches_count int Hányszor váltottak a dolgozók ezen az ütemezőn preemptív módra.

Az SQL Serveren kívüli kód (például kiterjesztett tárolt eljárások és elosztott lekérdezések) végrehajtásához a szálnak a nem megelőző ütemezőn kívül kell futnia. Ehhez a feldolgozó átáll a megelőző módra.
context_switches_count int Számos kontextusváltás történt ezen az ütemezőn. Nem lehet null értékű.

Ahhoz, hogy más dolgozók is tudhassanak futni, a jelenlegi dolgozónak le kell adnia az ütemező vagy a kontextus átváltásának irányítását.

Jegyzet: Ha egy dolgozó megadja az ütemezőt, és bekerül a futtatható sorba, majd nem talál más munkást, akkor a dolgozó magát választja. Ebben az esetben a context_switches_count nem frissül, de a yield_count frissül.
idle_switches_count int Hányszor várt az időpont egyeztető egy eseményre tétlen állapotban. Ez az oszlop hasonló a context_switches_count-hez. Nem lehet null értékű.
current_tasks_count int A jelenlegi feladatok száma, amelyek ehhez az ütemezőhöz kapcsolódnak. Ez a szám a következőket tartalmazza:

- Olyan feladatok, amelyek arra várnak, hogy egy dolgozó végrehajtsa őket.
- Olyan feladatok, amelyek jelenleg várnak vagy futnak (felfüggesztett vagy FUTTATHATÓ állapotban).

Amikor egy feladatot elvégeznek, ez a szám csökken. Nem lehet null értékű.
runnable_tasks_count int Azoknak a dolgozóknak a száma, akiknek feladatok vannak kijelölve, és akik a futható sorban várnak. Nem lehet null értékű.
current_workers_count int A dolgozók száma, akik ehhez az ütemezőhöz tartoznak. Ez a szám tartalmazza azokat a munkákat, akiknek nincs feladatuk. Nem lehet null értékű.
active_workers_count int Hány aktív dolgozó. Egy aktív dolgozó soha nem preemptív, hozzá kell kötnie egy feladatot, és vagy fut, futható, vagy felfüggesztett. Nem lehet null értékű.
work_queue_count bigint A függőben lévő feladatok száma. Ezek a feladatok arra várnak, hogy a dolgozó felvegye őket. Nem lehet null értékű.
pending_disk_io_count int A váratlan I/O-k száma, amelyek befejezésre várnak. Minden ütemezőnek van egy listája a függőben lévő I/O-król, amelyeket minden kontextusváltásnál ellenőriznek, hogy elkészültek-e a folyamatok. A szám nő, amikor a kérést beillesztjük. Ez a szám csökken, amikor a kérés befejeződik. Ez a szám nem jelzi az I/O-k állapotát. Nem lehet null értékű.
load_factor int Belső érték, amely jelzi az észlelt terhelést ezen az ütemezőn. Ezt az értéket arra használják, hogy meghatározzák, hogy új feladatot kell betenni erre az ütemezőre vagy egy másik ütemezőre. Ez az érték akkor hasznos hibakeresésben, amikor úgy tűnik, hogy az ütemezők nem egyenletesen töltődnek be. Az útvonalválasztási döntést az ütemező terhelése alapján hozzák meg. Az SQL Server emellett csomópontokból és ütemezőkből álló terhelési tényezőt is használ, hogy meghatározza, melyik hely megszerezhető erőforrások megszerzéséhez. Amikor egy feladatot sorba állítunk, a terhelési tényező nő. Amikor egy feladatot elvégeznek, a terhelési tényező csökken. A terhelési tényezők használata segít az SQL Server OS számára jobban kiegyensúlyozni a munkaterhelést. Nem lehet null értékű.
yield_count int Belső érték, amelyet az ütemező előrehaladásának jelezésére használnak. Ezt az értéket az Ütemező Monitor használja annak meghatározására, hogy az ütemezőn lévő dolgozó nem enged-e meg időben más dolgozóknak. Ez az érték nem jelzi, hogy a dolgozó vagy a feladat új munkássá vált. Nem lehet null értékű.
last_timer_activity bigint A CPU tick-ekben az utolsó alkalom, amikor az ütemező ellenőrizte az időzítő sorát. Nem lehet null értékű.
failed_to_create_worker bit Ha ezen az ütemezőn nem lehetett új dolgozót létrehozni, állítsuk 1-re. Ez általában memóriakorlátok miatt fordul elő. Null értékű.
active_worker_address varbinary(8) Az aktív dolgozó memóriacíme. Null értékű. További információért lásd sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Az ütemező memóriaobjektum memóriacíme. Nem NULLÁLHATÓ.
task_memory_object_address varbinary(8) A feladatmemória objektum memóriacíme. Nem lehet null értékű. További információért lásd sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált. Feltárja az SQLOS által használt ütemező kvantumot.
total_cpu_usage_ms bigint Érvényes: SQL Server 2016 (13.x) és újabb verziókra

Az ütemező által fogyasztott teljes CPU, amelyet nem preemptiós dolgozók jelentenek. Nem lehet null értékű.
total_cpu_idle_capped_ms bigint Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált. A Service Level Objective alapján korlátozott szabályozást jelöl, az SQL Server nem Azure verzióinál mindig 0 lesz. Null értékű.
total_scheduler_delay_ms bigint Érvényes: SQL Server 2016 (13.x) és újabb verziókra

Az idő, ahogy egy dolgozó kicserél és egy másik bevált. Okozhatja, hogy preemptív dolgozók késleltetik a következő nem preemptív munkatárs ütemezését, vagy az operációs rendszer más folyamatokból származó ütemezési szálakat is elkülöníti. Nem lehet null értékű.
ideal_workers_limit int Érvényes: SQL Server 2019 (15.x) és újabb verziók

Ideális esetben hány dolgozó kellene szerepelnie az ütemezőn? Ha a jelenlegi dolgozók kiegyensúlyozatlan munkaterhelés miatt túllépik a határt, amikor tétlenné válnak, akkor csökkentik őket. Nem lehet null értékű.
pdw_node_id int A következővonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW)

Annak a csomópontnak az azonosítója, amelyen ez a disztribúció található.

Permissions

Az SQL Serveren és a felügyelt SQL-példányon VIEW SERVER STATE engedély szükséges.

Az SQL Database Alapszintű, S0és S1 szolgáltatás célkitűzésein, valamint rugalmas készletekbenlévő adatbázisok esetében a kiszolgálói rendszergazdai fiókra, a Microsoft Entra rendszergazdai fiókra vagy a ##MS_ServerStateReader##kiszolgálói szerepkör tagságára van szükség. Az SQL Database szolgáltatás minden más célkitűzéséhez vagy az adatbázis VIEW DATABASE STATE engedélyére, vagy a ##MS_ServerStateReader## kiszolgálói szerepkör tagságára van szükség.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.

Példák

A. Rejtett és nem rejtett időzítők monitorozása

A következő lekérdezés az SQL Server dolgozók és feladatok állapotát adja ki minden ütemezőn. Ezt a lekérdezést egy olyan számítógépes rendszeren hajtották végre, amely a következőket tartalmazza:

  • Két processzor (CPU)

  • Két (NUMA) csomópont

  • Egy CPU minden NUMA node

  • Affinitás maszk beállítása .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;  

Itt van az eredmények összessége.

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  

A kimenet a következő információkat tartalmazza:

  • Öt ütemező van. Két ütemező azonosító értéke < 1048576. Az ID >= 1048576 ütemezőket rejtett ütemezőknek nevezik. Az Scheduler 255 a dedikált adminisztrátori kapcsolatot (DAC) képviseli. Instanciónként egy DAC időzítő van. Memórianyomást koordináló erőforrás-monitorok az ütemezőt 257 és ütemezőt 258használnak, egy NUMA csomópontonként egyet

  • A kimenetben 23 aktív feladat található. Ezek a feladatok magukban foglalják a felhasználói kéréseket és az SQL Server által indított erőforrás-kezelési feladatokat is. Az SQL Server feladatai közé tartozik a RESOURCE MONITOR (egy NUMA csomópontonként), LAZY WRITER (egy NUMA csomópontonként), LOCK MONITOR, CHECKPOINT és LOG WRITER.

  • A NUMA csomópontot 0 a CPU-hoz 1 , a NUMA csomópontot 1 pedig a CPU-hoz 0jelölik. Az SQL Server általában egy NUMA csomóponton indul, nem a 0 csomóponton.

  • A runnable_tasks_count visszatéréskor 0nincsenek aktívan futó feladatok. Azonban létezhetnek aktív ülések.

  • A DAC-ot képviselő ütemező 255 dolgozók 3 is hozzátartoznak. Ezek a dolgozók az SQL Server indításánál vannak kiosztva, és nem változnak. Ezeket a munkásokat csak DAC lekérdezések feldolgozására használják. A két feladat ezen az ütemezőn egy kapcsolatkezelőt és egy tétlen munkást jelent.

  • active_workers_count minden olyan munkás, akinek hozzárendelt feladata van, és nem preempáló üzemmódban fut. Néhány feladat, például a hálózati hallgatók, preempál ütemezés alatt futnak.

  • A rejtett időzítők nem dolgozzák fel a tipikus felhasználói kéréseket. A DAC ütemező a kivétel. Ennek a DAC ütemezőnek egy szála van a kérések feldolgozására.

B. Nem rejtett időzítők monitorozása egy forgalmas rendszerben

A következő lekérdezés mutatja a nehezen betöltött nem rejtett ütemezők állapotát, ahol több kérés létezik, mint amennyit a rendelkezésre álló munkások kezelnek. Ebben a példában 256 dolgozó kapott feladatokat. Néhány feladat arra vár, hogy egy dolgozónak adják a feladatot. Az alacsonyabb futtatható szám azt jelenti, hogy több feladat vár egy erőforrásra.

Megjegyzés:

A munkavállalók állapotát sys.dm_os_workers lekérdezéssel találhatod meg. További információért lásd sys.dm_os_workers (Transact-SQL).

Íme a kérdés:

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;  

Itt van az eredmények összessége.

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  

Összehasonlításképpen a következő eredmény több futtatható feladatot mutat, ahol nincs feladat a munkás megszerzésére. Ez work_queue_count0 mindkét időpont-beosztó számára van.

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  

Lásd még

SQL Server operációs rendszerhez kapcsolódó dinamikus felügyeleti nézetek (Transact-SQL)