Contrôler les ressources SQL Server
Alors que certains serveurs SQL ou instances managées Azure SQL prennent uniquement en charge les bases de données d’une seule application (cette configuration est courante dans les applications critiques), de nombreux serveurs prennent en charge les bases de données de plusieurs applications avec différentes exigences de performances et différents cycles de pics de charge de travail. Il peut être difficile pour l’administrateur de trouver un équilibre entre ces différentes exigences. L’une des façons d’équilibrer les ressources serveur consiste à utiliser Resource Governor, qui a été introduit dans SQL Server 2008.
Resource Governor est une fonctionnalité SQL Server et une instance managée Azure SQL qui vous permet de contrôler de manière précise la quantité de ressources de processeur, d’E/S physique et de mémoire pouvant être utilisée par une demande entrante d’une application. Resource Governor est activé au niveau de l’instance et vous permet de définir le mode de traitement des connexions en utilisant une fonction classifieur, qui sous-divise les sessions en groupe de charges de travail. Chaque groupe de charges de travail est configuré pour utiliser un pool spécifique de ressources système.
Pools de ressources
Un pool de ressources représente les ressources physiques disponibles sur le serveur. SQL Server a toujours deux pools, un par défaut et un interne, même si Resource Governor n’est pas activé. Le pool interne est utilisé par les fonctions SQL Server critiques et ne peut pas être limité. Le pool par défaut, et tous les pools de ressources que vous définissez explicitement, peuvent être configurés avec des limites sur les ressources qu’ils peuvent utiliser. Vous pouvez spécifier les limites suivantes pour chaque pool non interne :
Pourcentage min/max de processeur
Plafond du pourcentage de processeur
Pourcentage min/max de mémoire
Affinité de nœud NUMA
E/S par seconde min/max par volume
Notes
Les modifications apportées à un pool affectent uniquement les nouvelles sessions, pas celles qui existent déjà. Une modification apportée à un pool ne vous permet pas de limiter les ressources d’un processus de longue durée. L’exception est les pools externes utilisés avec SQL Server Machine Learning Services, qui sont externes à SQL Server et peuvent être limités par une modification de pool.
À l’exception du pourcentage de processeur min/max, tous les autres paramètres de pool de ressources représentent des limites matérielles qui ne peuvent pas être dépassées. Le pourcentage de processeur min/max s’applique uniquement en cas de contention du processeur. Par exemple, si vous avez un maximum de 70 %, si des cycles de processeur sont disponibles, la charge de travail peut utiliser jusqu’à 100 %. Si d’autres charges de travail sont en cours d’exécution, la charge de travail est limitée à 70 %.
Groupe de charges de travail
Un groupe de charge de travail est un conteneur pour les demandes de session en fonction de leur classification par la fonction classifieur. Comme les pools de ressources, il existe deux groupes intégrés, par défaut et internes, et chaque groupe de charges de travail ne peut appartenir qu’à un seul pool de ressources. Toutefois, un pool de ressources peut héberger plusieurs groupes de charges de travail. Toutes les connexions vont dans le groupe de charge de travail par défaut, sauf si elles sont passées à un autre groupe défini par l’utilisateur par la fonction classifieur. Par défaut, le groupe de charge de travail par défaut utilise les ressources affectées au pool de ressources par défaut.
Fonction classifieur
La fonction classifieur s’exécute au moment où une connexion est établie à l’instance SQL Server et classifie chaque connexion dans un groupe de charges de travail donné. Si la fonction retourne la valeur NULL, la valeur par défaut ou le nom d’un groupe de charges de travail inexistant, la session est transférée au groupe de charges de travail par défaut. Étant donné que le classifieur est exécuté à chaque connexion, son efficacité doit être testée. L’illustration suivante montre un exemple de fonction classifieur qui classifie les utilisateurs en fonction de leur nom d’utilisateur.
CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
SET @WorkloadGroup = 'ReportServerGroup'
ELSE IF (SUSER_NAME() = 'PrimaryUser')
SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
SET @WorkloadGroup = 'default'
RETURN @WorkloadGroup
END
Vous pouvez accroître la complexité de la définition de fonction illustrée dans l’exemple, mais vous devez vérifier que la fonction plus complexe n’a pas d’impact sur les performances des connexions utilisateur.
Cas d’usage de Resource Governor
Resource Governor est principalement utilisé dans les scénarios multilocataires où un groupe de bases de données partage une seule instance SQL Server et où les performances doivent rester cohérentes pour tous les utilisateurs du serveur. Vous pouvez également utiliser Resource Governor pour limiter les ressources utilisées par les opérations de maintenance, telles que les vérifications de cohérence et les reconstructions d’index, afin d’essayer de garantir des ressources suffisantes pour les requêtes utilisateur pendant les fenêtres de maintenance.