sys.dm_os_schedulers
Data aggiornamento: 14 aprile 2006
Restituisce una riga per utilità di pianificazione in SQL Server, dove ogni utilità di pianificazione è mappata a un singolo processore. Utilizzare questa vista per eseguire il monitoraggio delle condizioni di un'utilità di pianificazione oppure per identificare eventuali attività sfuggite al controllo.
Nome colonna
Tipo di dati
Descrizione
scheduler_address
varbinary(8)
Indirizzo di memoria dell'utilità di pianificazione. Non supporta valori Null.
parent_node_id
int
ID del nodo a cui appartiene l'utilità di pianificazione, definito anche nodo padre. Rappresenta un nodo NUMA (Non-Uniform Memory Access). Non supporta valori Null.
scheduler_id
int
ID dell'utilità di pianificazione. Tutte le utilità di pianificazione utilizzate per eseguire query normali sono identificate da numeri di ID minori di 255. Quelle con ID maggiori o uguali a 255 vengono utilizzate internamente da SQL Server, ad esempio per identificare l'utilità di pianificazione della connessione amministrativa dedicata (DAC, Dedicated Administrator Connection) Non supporta valori Null.
cpu_id
smallint
ID della CPU a cui l'utilità di pianificazione specifica è associata. Se SQL Server è configurato per l'esecuzione in base all'affinità, il valore corrisponde all'ID della CPU nella quale è prevista l'esecuzione dell'utilità di pianificazione.
255 = La maschera di affinità non è specificata.
Non supporta valori Null.
stato
nvarchar(60)
Indica lo stato dell'utilità di pianificazione. I valori possibili sono i seguenti:
- HIDDEN ONLINE
- HIDDEN OFFLINE
- VISIBLE ONLINE
- VISIBLE OFFLINE
- VISIBLE ONLINE (DAC)
Non supporta valori Null.
Le utilità di pianificazione HIDDEN vengono utilizzate per l'elaborazione delle richieste interne a Motore di database. Le utilità di pianificazione VISIBLE vengono utilizzate per l'elaborazione delle richieste dell'utente.
Le utilità di pianificazione OFFLINE eseguono il mapping ai processori che sono non in linea nella maschera di affinità e che non vengono pertanto utilizzati per l'elaborazione di alcuna richiesta. Le utilità di pianificazione ONLINE eseguono il mapping ai processori che sono in linea nella maschera di affinità e che sono disponibili per l'elaborazione di thread.
Il valore DAC indica che l'utilità di pianificazione è in esecuzione nell'ambito di una connessione amministrativa dedicata.
is_online
bit
Se SQL Server è configurato in modo da utilizzare solo alcuni dei processori disponibili nel server, è possibile che alcune utilità di pianificazione siano mappate a processori non inclusi nella maschera di affinità. In questo caso, la colonna restituisce 0, a indicare che l'utilità di pianificazione non viene utilizzata per elaborare query o batch.
Non supporta valori Null.
is_idle
bit
1 = L'utilità di pianificazione è inattiva. Nessun thread di lavoro è in esecuzione. Non supporta valori Null.
preemptive_switches_count
int
Numero di volte che i thread di lavoro nell'utilità di pianificazione corrente sono passati alla modalità preemptive.
Per eseguire codice esterno a SQL Server, ad esempio stored procedure estese e query distribuite, è necessario che un thread venga eseguito esternamente al controllo dell'utilità di pianificazione in modalità non preemptive. A tale scopo, un thread di lavoro passa alla modalità preemptive.
context_switches_count
int
Numero di cambi di contesto che si sono verificati nell'utilità di pianificazione corrente. Non supporta valori Null.
Per consentire l'esecuzione di altri thread di lavoro, il thread di lavoro in esecuzione deve cedere il controllo dell'utilità di pianificazione o cambiare contesto.
Nota:
Se un thread di lavoro rilascia l'utilità di pianificazione, si inserisce nella coda eseguibile e quindi non rileva altri thread di lavoro, il thread selezionerà se stesso. In questo caso la colonna context_switches_count non viene aggiornata, a differenza di yield_count, che viene aggiornata.
idle_switches_count
int
Numero di volte che l'utilità di pianificazione è rimasta in attesa di un evento durante il periodo di inattività. Questa colonna è simile a context_switches_count. Non supporta valori Null.
current_tasks_count
int
Numero di attività correnti associate all'utilità di pianificazione corrente. Questo numero include le attività seguenti:
- Attività in attesa di un thread di lavoro per essere eseguite.
- Attività in attesa o in esecuzione (in stato SUSPENDED o RUNNABLE).
Non appena un'attività viene completata, il conteggio viene ridotto. Non supporta valori Null.
runnable_tasks_count
int
Numero di thread di lavoro, con le attività ad essi assegnati, in attesa di essere pianificati nella coda eseguibile. Non supporta valori Null.
current_workers_count
int
Numero di thread di lavoro associati all'utilità di pianificazione corrente. Questo numero include i thread di lavoro a cui non sono state assegnate attività. Non supporta valori Null.
active_workers_count
int
Numero di thread di lavoro attivi. Un thread di lavoro attivo è sempre non preemptive e può essere in esecuzione, eseguibile o sospeso. È inoltre necessario che gli sia associata un'attività. Non supporta valori Null.
work_queue_count
bigint
Numero di attività nella coda in sospeso in attesa di essere prelevate da un thread di lavoro. Non supporta valori Null.
pending_disk_io_count
int
Numero di I/O in sospeso in attesa di essere completati. Ogni utilità di pianificazione dispone di un elenco di operazioni di I/O in sospeso che vengono verificate per determinarne il completamento ogni volta che si verifica un cambio di contesto. Il conteggio viene incrementato quando la richiesta viene inserita e viene ridotto quando la richiesta viene completata. Questo numero non indica lo stato degli I/O. Non supporta valori Null.
load_factor
int
Valore interno indicante il fattore di carico nell'utilità di pianificazione corrente. Questo valore viene utilizzato per determinare se una nuova attività deve essere inserita nell'utilità di pianificazione corrente oppure in un'altra utilità di pianificazione. Risulta utile per eseguire attività di debug nel caso in cui il carico delle utilità di pianificazione non sembra essere distribuito in modo uniforme. In SQL Server 2000 un'attività viene indirizzata a un'utilità di pianificazione specifica. Tuttavia, in SQL Server 2005 il routing viene definito in base al carico dell'utilità di pianificazione. SQL Server 2005 utilizza inoltre un fattore di caricamento di nodi e utilità di pianificazione per semplificare l'individuazione della posizione migliore per acquisire risorse. Quando un'attività viene accodata, il fattore di caricamento viene aumentato. Quando un'attività viene completata, il fattore di caricamento viene ridotto. L'utilizzo dei fattori di caricamento consente l'ottimizzazione del bilanciamento del carico di lavoro da parte del sistema operativo di SQL Server. Non supporta valori Null.
yield_count
int
Valore interno utilizzato per indicare lo stato dell'utilità di pianificazione corrente. Questo valore viene utilizzato dal sistema di monitoraggio dell'utilità di pianificazione per determinare se un thread di lavoro dell'utilità di pianificazione non restituisce tempestivamente il controllo ad altri thread di lavoro. Non indica il passaggio di un thread di lavoro o di un'attività a un nuovo thread di lavoro. Non supporta valori Null.
last_timer_activity
bigint
Espresso in tick della CPU, indica l'ultimo controllo della coda del timer dell'utilità di pianificazione da parte dell'utilità stessa. Non supporta valori Null.
failed_to_create_worker
bit
Impostare su 1 se risulta impossibile creare un nuovo thread di lavoro nell'utilità di pianificazione corrente. Ciò in genere si verifica a causa di vincoli a livello di memoria. Supporta valori Null.
active_worker_address
varbinary(8)
Indirizzo di memoria del thread di lavoro attivo. Supporta valori Null. Per ulteriori informazioni, vedere sys.dm_os_workers.
memory_object_address
varbinary(8)
Indirizzo di memoria dell'oggetto memoria dell'utilità di pianificazione. Non supporta valori Null.
task_memory_object_address
varbinary(8)
Indirizzo di memoria dell'oggetto memoria dell'attività. Non supporta valori Null. Per ulteriori informazioni, vedere sys.dm_os_memory_objects.
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE nel server.
Esempi
A. Monitoraggio delle utilità di pianificazione nascoste e non nascoste
La query seguente restituisce lo stato dei thread di lavoro e delle attività di SQL Server per tutte le utilità di pianificazione. La query viene eseguita su un computer dotato di:
- Due processori (CPU)
- Due nodi (NUMA)
- Una CPU per nodo NUMA
- Maschera di affinità impostata su
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;
Set di risultati:
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
L'output contiene le informazioni seguenti:
- Sono presenti cinque pianificazioni. Due utilità di pianificazione possiedono un valore di ID < 255. Le utilità di pianificazione con ID >= 255 vengono definite nascoste. L'utilità di pianificazione
255
rappresenta la connessione DAC. Per ogni istanza è prevista un'utilità di pianificazione DAC. I monitor risorse che coordinano le richieste di memoria utilizzano le utilità di pianificazione257
e258
, una per ogni nodo NUMA. - Nell'output sono presenti 23 attività in corso, che includono le richieste utente e le attività di gestione delle risorse avviate da SQL Server. Esempi di attività di SQL Server sono RESOURCE MONITOR (una per ogni nodo NUMA), LAZY WRITER (una per ogni nodo NUMA), LOCK MONITOR, CHECKPOINT e LOG WRITER.
- Il nodo NUMA
0
viene mappato alla CPU1
e il nodo NUMA1
viene mappato alla CPU0
. SQL Server viene in genere avviato su un nodo NUMA diverso dal nodo 0. Per ulteriori informazioni, vedere Informazioni sull'architettura NUMA (Non-Uniform Memory Access). - Se
runnable_tasks_count
restituisce0
, significa che non sono presenti attività in esecuzione attiva. È tuttavia possibile che esistano sessioni attive. - All'utilità di pianificazione
255
che rappresenta la connessione DAC sono associati3
thread di lavoro, che vengono allocati all'avvio di SQL Server e non subiscono modifiche. Tali thread vengono utilizzati esclusivamente per l'elaborazione delle query DAC. Le due attività presenti in questa utilità di pianificazione rappresentano una gestione connessione e un thread di lavoro inattivo. active_workers_count
rappresenta tutti i thread di lavoro a cui sono state associate attività e che vengono eseguiti in modalità non preemptive. Alcune attività, ad esempio i listener di rete, vengono eseguite nell'ambito di una pianificazione preemptive.- Le utilità di pianificazione nascoste non elaborano le richieste utente comuni. L'utilità di pianificazione DAC costituisce l'eccezione, poiché dispone di un thread per l'elaborazione delle richieste.
B. Monitoraggio delle utilità di pianificazione non nascoste in un sistema a utilizzo intensivo
Nella query seguente viene illustrato lo stato delle utilità di pianificazione non nascoste con carichi notevoli, in cui il numero delle richieste è maggiore di quello che può essere gestito dai thread di lavoro disponibili. In questo esempio le attività vengono assegnate a 256 thread di lavoro. Alcune attività sono in attesa dell'assegnazione a un thread di lavoro. Un conteggio di attività eseguibili inferiore indica che più attività sono in attesa di una risorsa.
[!NOTA] Per individuare lo stato dei thread di lavoro, è possibile eseguire una query su sys.dm_os_workers. Per ulteriori informazioni, vedere sys.dm_os_workers.
La query è la seguente:
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;
Set di risultati:
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
Nel risultato seguente sono invece presenti più attività eseguibili, mentre nessuna attività è in attesa di un thread di lavoro. Il valore di work_queue_count
è 0
per entrambe le utilità di pianificazione.
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
Vedere anche
Riferimento
Funzioni e viste a gestione dinamica
Viste a gestione dinamica relative al sistema operativo di SQL Server
Altre risorse
Configurazione superficie di attacco per le funzionalità (DAC) - Motore di database
Architettura della memoria
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|