sys.dm_os_schedulers
Mis à jour : 14 avril 2006
Retourne une ligne par planificateur dans SQL Server où chaque planificateur est associé à un processeur. Vous pouvez utiliser cet affichage pour surveiller la condition d'un planificateur ou pour identifier des tâches d'échappement.
Nom de colonne
Type de données
Description
scheduler_address
varbinary(8)
Adresse mémoire du planificateur. Cette colonne n'accepte pas la valeur NULL.
parent_node_id
int
Identificateur du nœud auquel le planificateur appartient. On parle également de nœud parent. Il s'agit d'un nœud NUMA (Nonuniform Memory Access). Cette colonne n'accepte pas la valeur NULL.
scheduler_id
int
Identificateur du planificateur. Tous les planificateurs utilisés pour exécuter des requêtes régulières ont des numéros d'identificateur inférieurs à 255. Les planificateurs qui sont identifiés par un numéro supérieur ou égal à 255 sont utilisés en interne par SQL Server, par exemple le planificateur de connexions administrateur dédiées. Cette colonne n'accepte pas la valeur NULL.
cpu_id
smallint
ID du processeur auquel le planificateur est associé. Si SQL Server est configuré pour s'exécuter avec affinité, il s'agit de l'identificateur du processeur sur lequel le planificateur est supposé s'exécuter.
255 = aucun masque d'affinité n'est spécifié.
Cette colonne n'accepte pas la valeur NULL.
status
nvarchar(60)
Indique l'état du planificateur. Il peut s'agir de l'une des valeurs suivantes :
- HIDDEN ONLINE
- HIDDEN OFFLINE
- VISIBLE ONLINE
- VISIBLE OFFLINE
- VISIBLE ONLINE (DAC)
Cette colonne n'accepte pas la valeur NULL.
Les planificateurs HIDDEN servent à traiter les requêtes internes du moteur de base de données. Les planificateurs VISIBLE servent à traiter les requêtes des utilisateurs.
Les planificateurs OFFLINE se mappent avec des processeurs qui sont déconnectés dans le masque d'affinité et qui ne sont, par conséquent, pas utilisés pour traiter des requêtes. Les planificateurs ONLINE se mappent avec des processeurs qui sont connectés dans le masque d'affinité et qui sont disponibles pour traiter des threads.
DAC indique que le planificateur s'exécute sous une connexion administrateur dédiée (DAC, Dedicated Administrator Connection).
is_online
bit
Si SQL Server est configuré pour utiliser uniquement certains des processeurs disponibles sur le serveur, cette configuration peut indiquer que certains planificateurs sont associés à des processeurs non inclus dans le masque d'affinité. Auquel cas, cette colonne retourne la valeur 0, ce qui signifie que le planificateur n'est pas utilisé pour traiter des requêtes ou des lots.
Cette colonne n'accepte pas la valeur NULL.
is_idle
bit
1 = Le planificateur est inactif. Aucun processus de travail n'est actuellement en cours d'exécution. Cette colonne n'accepte pas la valeur NULL.
preemptive_switches_count
int
Nombre de fois où les processus de travail opérant sur ce planificateur sont passés en mode préemptif.
Pour exécuter du code externe à SQL Server (par exemple, des procédures stockées étendues et des requêtes distribuées), un thread doit s'exécuter en dehors du contrôle du planificateur non préemptif. Pour ce faire, un processus de travail passe en mode préemptif.
context_switches_count
int
Nombre de commutateurs de contexte ayant eu lieu sur ce planificateur. Cette colonne n'accepte pas la valeur NULL.
Pour permettre à d'autres processus de travail de s'exécuter, le processus de travail en cours doit abandonner le contrôle du planificateur ou changer de contexte.
Remarque :
Si un processus de travail abandonne le planificateur et se place dans la file d'attente exécutable, puis ne trouve aucun autre processus de travail, il se sélectionne lui-même. Dans ce cas, context_switches_count n'est pas mis à jour, mais yield_count l'est.
idle_switches_count
int
Nombre de fois où le planificateur a attendu un événement quand il était inactif. Cette colonne est similaire à context_switches_count. Cette colonne n'accepte pas la valeur NULL.
current_tasks_count
int
Nombre de tâches actuellement associées au planificateur. Il s'agit des tâches suivantes :
- Tâches en attente d'un processus de travail pour les exécuter.
- Tâches qui sont actuellement en attente ou en cours d'exécution (dotées de l'état SUSPENDED ou RUNNABLE).
Lorsqu'une tâche est terminée, la valeur de ce compteur est décrémentée. Cette colonne n'accepte pas la valeur NULL.
runnable_tasks_count
int
Nombre de processus de travail, auxquels des tâches sont affectées, qui attendent d'être planifiés sur la file d'attente exécutable. Cette colonne n'accepte pas la valeur NULL.
current_workers_count
int
Nombre de processus de travail qui sont associés à ce planificateur. Il s'agit des processus de travail qui ne sont affectés à aucune tâche. Cette colonne n'accepte pas la valeur NULL.
active_workers_count
int
Nombre de processus de travail actifs. Un processus de travail actif est toujours non préemptif, doit être associé à une tâche et est soit en cours d'exécution, soit exécutable, soit suspendu. Cette colonne n'accepte pas la valeur NULL.
work_queue_count
bigint
Nombre de tâches dans la file d'attente de travail. Ces tâches attendent d'être sélectionnées par un processus de travail. Cette colonne n'accepte pas la valeur NULL.
pending_disk_io_count
int
Nombre d'E/S qui sont en attente. Chaque planificateur possède une liste d'E/S en attente, lesquelles sont vérifiées lors de chaque changement de contexte pour déterminer si elles ont été effectuées. Le compteur est incrémenté lorsque la demande est insérée. Le compteur est décrémenté lorsque la demande est terminée. Cette valeur n'indique pas l'état des E/S. Cette colonne n'accepte pas la valeur NULL.
load_factor
int
Valeur interne qui indique la charge perçue sur le planificateur. Cette valeur est utilisée pour déterminer si une nouvelle tâche doit être placée sur ce planificateur ou sur un autre planificateur. Cette valeur est utile à des fins de débogage, lorsqu'il apparaît que les planificateurs ne sont pas chargés de façon uniforme. Dans SQL Server 2000, une tâche est routée vers un planificateur spécifique. Dans SQL Server 2005, la décision de routage est effectuée en fonction de la charge placée sur le planificateur. SQL Server 2005 utilise également un facteur de charge des nœuds et des planificateurs pour déterminer l'emplacement idéal pour l'acquisition des ressources. Lorsqu'une tâche est placée en file d'attente, le facteur de charge est incrémenté. Lorsqu'une tâche est terminée, le facteur de charge est décrémenté. Les facteurs de charge permettent un meilleur équilibrage de la charge de travail par le système d'exploitation SQL Server. Cette colonne n'accepte pas la valeur NULL.
yield_count
int
Valeur interne utilisée pour indiquer la progression du travail sur le planificateur. Cette valeur permet à la tâche système interne de déterminer si un processus de travail du planificateur ne transmet pas ses résultats aux autres processus de travail à temps. Elle n'indique pas que le processus de travail ou la tâche est passé à un nouveau processus de travail. Cette colonne n'accepte pas la valeur NULL.
last_timer_activity
bigint
Dans les cycles de l'UC, cette valeur indique à quel moment a eu lieu la dernière vérification de la file d'attente du minuteur par le planificateur. Cette colonne n'accepte pas la valeur NULL.
failed_to_create_worker
bit
Cette valeur est définie à 1 s'il a été impossible de créer un nouveau processus de travail sur le planificateur. Ce problème est souvent la conséquence de contraintes de mémoire. Cette colonne accepte la valeur NULL.
active_worker_address
varbinary(8)
Adresse mémoire du processus de travail actuellement actif. Cette colonne accepte la valeur NULL. Pour plus d'informations, consultez sys.dm_os_workers.
memory_object_address
varbinary(8)
Adresse mémoire de l'objet mémoire du planificateur. Cette colonne n'accepte pas la valeur NULL.
task_memory_object_address
varbinary(8)
Adresse mémoire de l'objet mémoire de la tâche. Cette colonne n'accepte pas la valeur NULL. Pour plus d'informations, consultez sys.dm_os_memory_objects.
Autorisations
L'autorisation VIEW SERVER STATE est nécessaire sur le serveur.
Exemples
A. Analyse des planificateurs masqués et non masqués
La requête suivante produit l'état des processus de travail et des tâches dans SQL Server sur tous les planificateurs. Cette requête a été exécutée sur un système informatique présentant la configuration suivante :
- Deux processeurs (UC)
- Deux nœuds (NUMA)
- Une UC par nœud NUMA
- Masque d'affinité défini à
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;
Voici l'ensemble des résultats.
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
Le résultat de la requête fournit les informations suivantes :
- Les planificateurs sont au nombre de cinq. Deux planificateurs possèdent une valeur d'ID inférieure à 255. Les planificateurs possédant une valeur d'ID supérieure ou égale à 255 sont qualifiés de planificateurs masqués. Le planificateur
255
représente la connexion administrateur dédiée (DAC). Il existe un planificateur DAC par instance. Les moniteurs de ressources qui coordonnent la sollicitation de la mémoire utilisent le planificateur257
et le planificateur258
, un par nœud NUMA. - Le résultat présente 23 tâches actives. Ces tâches incluent les demandes utilisateur qui ont été démarrées par SQL Server en plus des tâches de gestion des ressources. RESOURCE MONITOR (une par nœud NUMA), LAZY WRITER (une par nœud NUMA), LOCK MONITOR, CHECKPOINT et LOG WRITER sont des exemples de tâches SQL Server.
- Le nœud NUMA
0
est mappé à l'UC1
et le nœud NUMA1
est mappé à l'UC0
. SQL Server démarre généralement sur un nœud NUMA autre que le nœud 0. Pour plus d'informations, consultez Présentation de l'accès NUMA (Non-uniform Memory Access). - Lorsque
runnable_tasks_count
retourne0
, aucune tâche n'est activement exécutée. Il peut cependant exister des sessions actives. - Le planificateur
255
représentant la connexion administrateur dédiée (DAC) est associé à3
processus de travail. Ces derniers sont affectés au démarrage de SQL Server et ne changent pas. Ils sont utilisés pour traiter les requêtes à l'aide de la connexion administrateur dédiée uniquement. Les deux tâches sur ce planificateur représentent un gestionnaire de connexions et un processus de travail inactif. active_workers_count
représente tous les processus de travail auxquels sont associées des tâches et qui s'exécutent en mode non préemptif. Certaines tâches, comme les écouteurs de réseau, s'exécutent en mode de planification préemptive.- Les planificateurs masqués ne traitent pas les demandes utilisateur standard. Le planificateur DAC constitue l'exception. Ce planificateur DAC possède un thread pour traiter les demandes.
B. Analyse des planificateurs non masqués dans un système occupé
La requête suivante indique l'état des planificateurs non masqués particulièrement chargés, lorsque la quantité de requêtes existante est supérieure à la quantité pouvant être gérée par les processus de travail disponibles. Dans cet exemple, 256 processus de travail sont affectés à des tâches. Certaines tâches sont en attente d'une affectation à un processus de travail. Un nombre exécutable faible implique que plusieurs tâches attendent une ressource.
Remarque : |
---|
Vous pouvez interroger sys.dm_os_workers pour trouver l'état des processus de travail. Pour plus d'informations, consultez sys.dm_os_workers. |
La requête est la suivante :
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;
Voici l'ensemble des résultats.
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
En comparaison, le résultat suivant affiche plusieurs tâches exécutables où aucune tâche n'attend l'obtention d'un processus de travail. work_queue_count
a la valeur 0
pour les deux planificateurs.
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
Voir aussi
Référence
Fonctions et vues de gestion dynamique
Vues de gestion dynamique SQL Server liées au système d'exploitation
Autres ressources
Configuration de la surface d'exposition pour les fonctionnalités (DAC) - Moteur de base de données
Architecture de la mémoire
Aide et Informations
Assistance sur SQL Server 2005
Historique des modifications
Version | Historique |
---|---|
14 avril 2006 |
|