Concepts du gouverneur de ressources

Les trois concepts suivants sont fondamentaux pour connaître le fonctionnement et l'utilisation du gouverneur de ressources :

  • Pools de ressources. Deux pools de ressources (interne et par défaut) sont créés lorsque SQL Server 2008 est installé. Le gouverneur de ressources prend aussi en charge des pools de ressources définis par l'utilisateur.

  • Groupes de charges de travail. Deux groupes de charges de travail (interne et par défaut) sont créés et mappés à leurs pools de ressources correspondants lorsque SQL Server 2008 est installé. Le gouverneur de ressources prend aussi en charge des groupes de charges de travail définis par l'utilisateur.

  • Classification. Il existe des règles internes qui classent les demandes entrantes et les acheminent à un groupe de charges de travail. Le gouverneur de ressources prend en charge également une fonction classifieur définie par l'utilisateur pour implémenter des règles de classification.

[!REMARQUE]

Le gouverneur de ressources n'impose pas de contrôles sur une connexion DAC (Dedicated Administrator Connection). Il n'est pas nécessaire de classer les requêtes DAC qui s'exécutent dans le groupe de charges de travail et le pool de ressources internes.

Dans le contexte du gouverneur de ressources, vous pouvez traiter les concepts précédents comme composants. L'illustration suivante montre ces composants et leur relation mutuelle dans l'environnement du moteur de base de données. Dans une perspective de traitement, le flux simplifié est le suivant :

  • Il existe une connexion entrante pour une session (Session 1 de n).

  • La session est classifiée (Classification).

  • La charge de travail de session est acheminée vers un groupe de charges de travail, par exemple, Groupe 4.

  • Le groupe de charges de travail utilise le pool de ressources auquel il est associé, par exemple, Groupe 2.

  • Le pool de ressources fournit et limite les ressources requises par l'application, par exemple, Application 3.

Composants fonctionnels du gouverneur de ressources

Pools de ressources

Un pool de ressources, ou pool, représente les ressources physiques du serveur. Vous pouvez envisager un pool comme une instance SQL Server virtuelle dans une instance SQL Server.

Un pool a deux parties. Une partie ne se chevauche pas avec les autres pools, ce qui permet de conserver un minimum de ressources. L'autre partie est partagée avec d'autres pools et prend en charge la consommation maximale des ressources possible. Dans cette version du gouverneur de ressources, les ressources du pool sont définies en spécifiant l'un des éléments suivants pour chaque ressource :

  • MIN ou MAX de l'UC

  • MIN ou MAX de la mémoire

Les valeurs MIN et MAX représentent les ressources minimales garanties disponibles du pool et la taille maximale de celui-ci, respectivement, pour chacune de ces ressources.

La somme des valeurs MIN pour l'ensemble des pools ne peut pas dépasser 100 pour cent des ressources de serveur. La valeur MAX peut prendre n'importe quelle valeur comprise entre la valeur MIN et 100 pour cent inclus.

Si un pool a une valeur MIN différente de zéro définie, la valeur MAX effective des autres pools est rajustée comme minimum de la valeur maximale configurée d'un pool, et la somme des valeurs MIN des autres pools est soustraite de 100 pour cent.

Le tableau suivant illustre les concepts précédents. Le tableau contient les paramètres pour le pool interne, le pool par défaut et deux pools définis par l'utilisateur. Les formules suivantes sont utilisées pour calculer le pourcentage maximal et le pourcentage partagé effectifs.

  • Min(X,Y) signifie la valeur plus petite de X et Y.

  • Sum(X) signifie la somme de la valeur X pour tous les pools.

  • Total % partagé = 100 - sum(MIN %).

  • % maximal effectif = min(X,Y).

  • % partagé = % MAX - % MIN effectifs.

Nom du pool

Paramètre % MIN

Paramètre % MAX

% MAX effectif calculé

% partagé calculé

Commentaire

interne

0

100

100

0

Les valeurs effectives % MAX et % partagé ne sont pas applicables au pool interne.

valeur par défaut

0

100

30

30

La valeur MAX effective est calculée comme suit : min(100,100-(20+50)) = 30. Le % partagé calculé est effective MAX - MIN = 30.

Pool 1

20

100

50

30

La valeur MAX effective est calculée comme suit : min(100,100-50) = 50. Le % partagé calculé est Effective MAX - MIN = 30.

Pool 2

50

70

70

20

La valeur MAX effective est calculée comme suit : min(70,100-20) = 70. Le % partagé calculé est Effective MAX - MIN = 20.

À l'aide du tableau précédent en exemple, il est possible d'illustrer davantage les réglages qui s'opèrent à la création d'un autre pool. Ce pool est Pool 3 et a un paramètre % MIN de 5.

Nom du pool

Paramètre % MIN

Paramètre % MAX

% MAX effectif calculé

% partagé calculé

Commentaire

interne

0

100

100

0

Les valeurs effectives % MAX et % partagé ne sont pas applicables au pool interne.

valeur par défaut

0

100

25

25

La valeur MAX effective est calculée comme suit : min(100,100-(20+50+5)) = 25. Le % partagé calculé est Effective MAX - MIN = 25.

Pool 1

20

100

45

25

La valeur MAX effective est calculée comme suit : min(100,100-55) = 45. Le % partagé calculé est Effective MAX - MIN = 25.

Pool 2

50

70

70

20

La valeur MAX effective est calculée comme suit : min(70,100-25) = 70. Le % partagé calculé est effective MAX - MIN = 20.

Pool 3

5

100

30

25

La valeur MAX effective est calculée comme suit : min(100,100-70) = 30. Le % partagé calculé est effective MAX - MIN = 25.

La partie partagée du pool est utilisée pour indiquer la destination des ressources disponibles si des ressources sont disponibles. Toutefois, lorsque les ressources sont consommées, elles sont acheminées vers le pool spécifié et ne sont pas partagées. Cette procédure peut améliorer l'utilisation des ressources en l'absence de demandes dans un pool donné et elle permet de libérer les ressources configurées du pool pour d'autres pools.

Certains cas extrêmes de configuration de pool sont :

  • Tous les pools définissent des valeurs minimales qui représentent 100 pour cent du total des ressources du serveur. Dans ce cas, les valeurs maximales effectives sont égales aux valeurs minimales. Cela revient à diviser les ressources de serveur en portions qui ne se chevauchent pas indépendamment des ressources consommées dans un pool donné.

  • Tous les pools ont des valeurs minimales nulles. Tous les pools sont en concurrence pour les ressources disponibles et leurs tailles finales sont basées sur la consommation des ressources dans chaque pool. D'autres facteurs tels que les stratégies jouent un rôle dans la définition de la taille finale du pool.

Le gouverneur de ressources prédéfinit deux pools de ressources, le pool interne et le pool par défaut.

Pool interne

Le pool interne représente les ressources consommées par SQL Server. Ce pool contient toujours uniquement le groupe interne, et il est impossible de le modifier. La consommation des ressources par le pool interne n'est pas restreinte. Toutes les charges de travail dans le pool sont considérées comme critiques pour la fonction de serveur, et le gouverneur de ressources permet au pool interne de contraindre d'autres pools même si cela implique la violation des limites définies pour les autres pools.

[!REMARQUE]

L'utilisation des ressources de pool interne et de groupe interne n'est pas soustraite de l'utilisation des ressources totales. Les pourcentages sont calculés à partir des ressources totales disponibles.

Pool par défaut

Le pool par défaut est le premier pool d'utilisateur prédéfini. Avant toute configuration, le pool par défaut contient seulement le groupe par défaut. Le pool par défaut ne peut pas être créé ou supprimé mais il peut être modifié. Le pool par défaut peut contenir des groupes définis par l'utilisateur en plus du groupe par défaut.

[!REMARQUE]

Le groupe par défaut est modifiable mais il ne peut pas être déplacé hors du pool par défaut.

Pools de ressources définis par l'utilisateur

Le gouverneur de ressources fournit des instructions DDL pour créer, changer et supprimer des pools de ressources. Pour plus d'informations, consultez DDL du gouverneur de ressources et vues système.

Groupes de charges de travail

Un groupe de charges de travail sert de conteneur pour les demandes de session qui sont semblables selon les critères de classification appliqués à chaque demande. Un groupe de charges de travail permet l'analyse globale de la consommation des ressources et l'application d'une stratégie uniforme à toutes les demandes dans le groupe. Un groupe définit les stratégies pour ses membres.

[!REMARQUE]

Les groupes de charges de travail définis par l'utilisateur peuvent être déplacés d'un pool de ressources à un autre.

Le gouverneur de ressources prédéfinit deux groupes de charges de travail : le groupe interne et le groupe par défaut. Un utilisateur ne peut pas modifier des éléments classés comme un groupe interne, mais il peut les surveiller. Les demandes sont classées dans le groupe par défaut si les conditions suivantes sont réunies :

  • il n'existe pas de critères pour classer une demande ;

  • une tentative pour classer la demande dans un groupe inexistant a été effectuée ;

  • un échec de classification général s'est produit.

Le gouverneur de ressources fournit aussi des instructions DDL pour créer, changer et supprimer des groupes de charges de travail. Pour plus d'informations, consultez DDL du gouverneur de ressources et vues système.

Classification

Le gouverneur de ressources prend en charge la classification des sessions entrantes. La classification est basée sur un jeu de critères écrits par l'utilisateur et contenus dans une fonction. Les résultats de la logique de la fonction permettent au gouverneur de ressources de classer des sessions en groupes de charges de travail existants.

[!REMARQUE]

Le groupe de charges de travail interne est rempli avec les demandes destinées à un usage interne uniquement. Vous ne pouvez pas modifier les critères utilisés pour acheminer ces demandes et vous ne pouvez pas classer de demandes dans le groupe de charges de travail interne.

Vous pouvez écrire une fonction scalaire qui contient la logique utilisée pour assigner des sessions entrantes à un groupe de charges de travail. Avant de pouvoir utiliser cette fonction, vous devez effectuer les opérations suivantes :

  • Créer et enregistrer la fonction à l'aide de l'instruction ALTER RESOURCE GOVERNOR. Pour plus d'informations, consultez ALTER RESOURCE GOVERNOR (Transact-SQL).

  • Mettre à jour la configuration du gouverneur de ressources à l'aide de l'instruction ALTER RESOURCE GOVERNOR avec le paramètre RECONFIGURE.

Une fois la fonction créé et les modifications de configuration appliquées, le classifieur du gouverneur de ressources utilise le nom du groupe de charges de travail retourné par la fonction pour envoyer une nouvelle demande au groupe de charge de travail approprié.

Important

La session cliente peut expirer si la fonction de classification ne se termine pas dans le délai d'attente spécifié pour la connexion. Le délai d'attente de connexion est une propriété cliente et à ce titre, le serveur n'en a pas connaissance. Une fonction classifieur de longue durée peut entraîner des connexions orphelines au niveau du serveur pendant de longues périodes. Il est important de créer des fonctions classifieur dont l'exécution se termine avant l'expiration d'un délai de connexion.

La fonction définie par l'utilisateur a les caractéristiques et les comportements suivants :

  • La fonction définie par l'utilisateur est évaluée pour chaque nouvelle session, même lorsque le regroupement de connexions est activé.

  • La fonction définie par l'utilisateur donne le contexte de groupe de charges de travail pour la session. Une fois l'appartenance aux groupes déterminée, la session est liée au groupe de charges de travail pour la durée de la session.

  • Si la fonction définie par l'utilisateur retourne NULL, la valeur par défaut ou le nom de groupe inexistant, elle se voit attribuer le contexte de groupe de charges de travail par défaut. La session se voit attribuer aussi le contexte par défaut si la fonction échoue pour une raison donnée.

  • La fonction doit être définie avec une étendue de serveur (base de données master).

  • La désignation de la fonction classifieur définie par l'utilisateur entre seulement en vigueur après l'exécution de l'instruction ALTER RESOURCE GOVERNOR RECONFIGURE.

  • Une seule fonction définie par l'utilisateur peut être désignée à la fois comme classifieur.

  • La fonction classifieur définie par l'utilisateur ne peut pas être supprimée ou modifiée sauf si son état classifieur est supprimé.

  • En l'absence d'une fonction classifieur définie par l'utilisateur, toutes les sessions sont classifiées dans le groupe par défaut.

  • Le groupe de charges de travail retourné par la fonction classifieur est hors de la portée de la restriction de liaison du schéma. Par exemple, vous ne pouvez pas supprimer une table mais vous pouvez supprimer un groupe de charges de travail.

Important

L'activation de la connexion administrateur dédiée (DAC) sur le serveur est conseillée. La connexion administrateur dédiée n'est pas soumise à la classification du gouverneur de ressources et peut être utilisée pour surveiller et dépanner une fonction classifieur. Pour plus d'informations, consultez Utilisation d'une connexion d'administrateur dédiée. L'autre solution, lorsqu'une connexion administrateur dédiée n'est pas disponible pour la résolution des problèmes, consiste à redémarrer le système en mode mono-utilisateur. Le mode mono-utilisateur n'est pas sujet à la classification ; toutefois, il ne vous permet pas d'effectuer un diagnostic de la classification du gouverneur de ressources s'il est en cours d'exécution.

Processus de classification

Dans le contexte du gouverneur de ressources, le processus de connexion pour une session comprend les étapes suivantes :

  1. authentification des connexions ;

  2. exécution des déclencheurs LOGON ;

  3. classification.

Lorsque la classification commence, le gouverneur de ressources exécute la fonction classifieur et utilise la valeur retournée par la fonction pour envoyer des demandes au groupe de charges de travail approprié. Pour plus d'informations, consultez Considérations sur l'écriture d'une fonction classifieur.

[!REMARQUE]

Les informations relatives à l'exécution de la fonction classifieur et des déclencheurs LOGON sont exposées dans sys.dm_exec_sessions et sys.dm_exec_requests.