Passer au contenu

Comment résoudre les problèmes d'utilisation élevée du processeur sur mon instance Amazon RDS for SQL Server ?

Lecture de 7 minute(s)
0

Je constate une utilisation élevée du processeur sur mes instances de base de données Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server.

Brève description

Les raisons suivantes peuvent entraîner une augmentation de l'utilisation du processeur :

  • Charges de travail importantes initiées par l'utilisateur, requêtes simultanées multiples ou transactions de longue durée
  • Utilisation d'une classe d'instance sous-provisionnée pour la charge de travail
  • Statistiques obsolètes et fragmentation des index ou index manquants
  • Requêtes susceptibles d'être améliorées
  • Blocage et interblocage
  • Parallélisme
  • Compilation et recompilation fréquentes
  • Détection de paramètres
  • Épuisement de threads

Pour identifier la source d'une utilisation élevée du processeur pour votre instance Amazon RDS for SQL Server, utilisez les outils suivants :

Une fois la source identifiée, vous pouvez analyser et optimiser votre charge de travail afin de réduire l’utilisation du processeur.

Résolution

Métriques CloudWatch pour Amazon RDS

Utilisez les métriques CloudWatch pour Amazon RDS suivantes afin d'identifier les modèles de processeur sur de longues périodes.

Pour déterminer quand la charge de travail augmente l'utilisation du processeur, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, sélectionnez Bases de données, puis sélectionnez la base de données à surveiller.
  3. Choisissez l'onglet Surveillance.
  4. Choisissez le menu Surveillance, puis sélectionnez CloudWatch.
  5. Recherchez les métriques CloudWatch suivantes, puis comparez les graphiques :
    WriteIOPs
    ReadIOPs
    ReadThroughput
    WriteThroughput
    CPUUtilization
    CPUCreditBalance
    CPUCreditUsage

Remarque : Si le solde de crédits du processeur diminue régulièrement et que l'utilisation des crédits du processeur augmente systématiquement, cela signifie que le nombre de cœurs de processeur est insuffisant pour la charge de travail. Si vous utilisez une instance de la classe d'instance t2 ou t3, vérifiez si votre instance est sous-provisionnée.

Après avoir identifié la période, utilisez la surveillance améliorée pour examiner plus en détail les données associées à votre instance de base de données. Vous pouvez configurer la surveillance améliorée pour collecter des données à des intervalles de 1, 5, 10, 15, 30 ou 60 secondes.

Surveillance améliorée

Vous pouvez configurer la surveillance améliorée pour surveiller le système d'exploitation qui s'exécute sur votre instance de base de données.

Pour vérifier l'utilisation du processeur à l'aide de la surveillance améliorée, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, sélectionnez Bases de données, puis sélectionnez la base de données à surveiller.
  3. Choisissez l'onglet Surveillance.
  4. Choisissez le menu Surveillance, puis sélectionnez Liste des processus du système d'exploitation.

Vérifiez si les processus du système d'exploitation, les processus RDS, les processus de SQL Server ou les processus de SQL Agent entraînent une utilisation élevée du processeur. Vous pouvez également vérifier le pourcentage de processeur et de mémoire utilisés par ces processus.

Utilisez la console pour surveiller les métriques de performance. Dans l'onglet Surveillance, choisissez le menu Surveillance, puis sélectionnez Gérer les graphiques.

Pour déterminer quand le processeur exécute des processus utilisateur, exécute des noyaux ou est inactif, sélectionnez les graphiques correspondant aux métriques Utilisateur du processeur, Système du processeur et Inactivité du processeur. Sélectionnez ensuite les métriques pour les I/O sur disque et les I/O sur périphériques physiques. Ces métriques incluent les I/O de lecture, les I/O d’écriture, les Ko/s en lecture et les Ko/s en écriture. Vous pouvez également consulter les paramètres liés à la mémoire, notamment la mémoire disponible, la mémoire totale de SQL Server et la mémoire totale. Ces métriques sont utiles car si le processeur passe plus de temps à attendre les ressources, vous pourriez constater une utilisation élevée du processeur.

Pour plus d'informations, consultez la section Affichage des métriques du système d'exploitation dans la console RDS.

Database Insights

Utilisez CloudWatch Database Insights pour résoudre les principaux problèmes responsables de la charge sur la base de données et aux processus individuels du système d'exploitation exécutés sur un groupe d'instances.

Par défaut, le mode Standard de Database Insights est activé pour votre base de données Amazon RDS. Pour activer le mode standard lorsque vous créez ou modifiez votre instance de base de données, consultez la section Activation du mode standard de Database Insights pour Amazon RDS.

Remarque : Si vous n'utilisez pas d'autorisations plus étendues, veillez à accorder les autorisations IAM requises pour Database Insights. Pour plus d'informations, consultez la section Démarrer avec CloudWatch Database Insights.

Pour plus d'informations sur Amazon RDS et la prise en charge des classes d'instance, consultez la section Prise en charge du moteur de base de données Amazon RDS, des régions et des classes d'instance pour Database Insights.

Performance Insights

Activez Performance Insights pour identifier les requêtes responsables de la charge sur la base de données.

Procédez comme suit :

  1. Accédez au tableau de bord Performance Insights.
  2. Vérifiez l'onglet SQL maximum qui correspond à la période que vous souhaitez analyser.
  3. Identifiez la requête qui prend le plus de temps.
  4. Vérifiez la requête qui exige le plus de ressources et les événements d'attente observés au cours de cette période. Les événements d'attente fréquemment associés à une utilisation élevée du processeur sont les suivants :

SOS_SCHEDULER_YIELD montre qu'un worker thread a cédé la place à l'exécution d'un autre thread. Lorsque le nombre d'attentes est élevé et que les temps d'attente sont faibles, les requêtes sont généralement liés au processeur. Lorsque les worker threads cèdent leur droit d’exécution, les temps d'attente dans les requêtes liées au processeur peuvent augmenter. Si le temps d'attente est long, vous devez examiner la charge de travail. Si SOS_SCHEDULER_YIELD est fréquent, la pression sur le processeur est la source du problème. Examinez le type de charge de travail et effectuez des réglages supplémentaires.

CXPACKET et CXCONSUMER sont des événements d'attente liés au parallélisme qui ne sont généralement pas préoccupants. Toutefois, si les événements d'attente sont fréquents et affectent les performances, examinez les requêtes et définissez les valeurs appropriées pour le seuil de coût du parallélisme. Assurez-vous que SQL Server choisit le paramètre de parallélisme le moins coûteux dans le groupe de paramètres. Vous pouvez également augmenter le degré maximum de parallélisme, MAXDOP, à 1 au niveau de la requête ou de l'instance.

ThreadPool indique l'épuisement des threads. Si votre classe d'instance peut le gérer, augmentez le paramètre maximal des worker threads. Vous pouvez être confronté à des attentes de ThreadPool lorsqu'un nombre excessif de threads est utilisé en raison d'un blocage, d'une charge de travail élevée ou d'un nombre élevé de requêtes parallèles. De plus, si vous configurez incorrectement le paramètre maximal de worker threads, l'événement d’attente ThreadPool peut se produire.

Consultez les métriques de base de données pour les requêtes par lots, les compilations SQL et les recompilations SQL. Vérifiez l’existence de requêtes qui sont compilées plusieurs fois. Vérifiez également si les requêtes sont fréquemment recompilées pour un lot donné. Si tel est le cas, cela indique que la clause WITH RECOMPILE est utilisée dans le code de requête. Ces deux raisons peuvent entraîner une utilisation excessive du processeur.

Outils SQL Server

Pour résoudre les problèmes liés à l'utilisation élevée du processeur à l'aide des outils SQL Server, effectuez les actions suivantes :