Cinq étapes pour dépanner une dégradation soudaine des performances dans AWS RDS

Apprenez cinq étapes essentielles pour diagnostiquer et résoudre rapidement une dégradation soudaine des performances dans les bases de données AWS RDS. Ce guide propose une méthodologie systématique, commençant par l'analyse immédiate des métriques à l'aide de CloudWatch et Performance Insights. Découvrez comment identifier les goulots d'étranglement des ressources (CPU, E/S, connexions), localiser les requêtes lentes à l'aide des plans d'exécution, et valider les configurations critiques des instances, telles que les soldes de crédits des instances T et les paramètres des groupes de paramètres, garantissant ainsi une restauration efficace des performances optimales de la base de données.

34 vues

Cinq étapes pour dépanner une dégradation soudaine des performances dans AWS RDS

La dégradation soudaine des performances dans une base de données de production est l'un des problèmes les plus critiques rencontrés par les équipes d'exploitation. Amazon Relational Database Service (RDS) simplifie la gestion des bases de données, mais le dépannage des ralentissements inattendus – qui se manifestent par une latence élevée, des délais d'attente de transaction ou des erreurs d'application – nécessite toujours une approche systématique et ciblée.

Ce guide présente cinq étapes pratiques et concrètes pour identifier rapidement la cause profonde des baisses de performances de votre instance AWS RDS, en se concentrant sur l'utilisation des outils de surveillance AWS intégrés et des techniques standard de diagnostic de base de données. En suivant cette méthodologie séquentielle, vous pouvez passer efficacement de l'analyse des symptômes à la résolution.


Étape 1 : Analyse immédiate des métriques via CloudWatch et Performance Insights

La première étape de toute investigation de performance consiste à quantifier le goulot d'étranglement. AWS CloudWatch fournit les métriques de haut niveau nécessaires pour diagnostiquer si le problème est lié au calcul (compute-bound), aux E/S (I/O-bound) ou aux connexions (connection-bound).

Métriques clés à examiner

Analysez les métriques suivantes, en vous concentrant spécifiquement sur la période précédant et pendant la dégradation, et en recherchant les pics corrélés :

  1. Utilisation du CPU : Un pic soudain approchant les 100 % indique généralement une charge de travail excessive, des plans de requêtes médiocres ou une tâche d'arrière-plan massive.
  2. IOPS en lecture/écriture et latence : Une latence élevée combinée à des IOPS maximales indique que la base de données est bloquée en attente de stockage. Ceci est courant si la charge de travail dépasse les IOPS provisionnées (PIOPS) ou si les instances SSD à usage général (gp2/gp3) épuisent leur solde de rafale.
  3. Connexions à la base de données : Une forte augmentation des connexions actives peut épuiser la mémoire ou atteindre la limite max_connections, entraînant des échecs de connexion et des contentions de ressources.
  4. Mémoire libre (Freeable Memory) : Une chute rapide ou une mémoire libre constamment basse peut indiquer une mise en cache inefficace des requêtes ou des processus utilisant une mémoire excessive, entraînant un swapping (qui est gourmand en E/S et lent).

Utilisation de Performance Insights

Pour la plupart des moteurs RDS modernes (PostgreSQL, MySQL, MariaDB, Oracle, SQL Server), Performance Insights (PI) est l'outil le plus crucial. PI représente visuellement la charge de la base de données (Database Load ou DB Load), vous permettant de voir immédiatement ce qui a causé le pic :

  • PI décompose la charge de la base de données (DB Load) par état d'attente (Wait State) (par exemple, CPU, attente E/S, attente de verrou) et par requêtes SQL principales (Top SQL), offrant une visibilité instantanée sur la source du goulot d'étranglement.

Conseil : Si la charge de la base de données (DB Load) atteint un pic mais que la majorité de l'attente est catégorisée comme CPU, le problème est lié au traitement complexe des requêtes. Si l'attente est principalement due aux E/S, le problème concerne la lecture ou l'écriture de données sur le stockage.

Étape 2 : Examiner les sessions actives et les événements d'attente

Une fois que les métriques confirment se situe le goulot d'étranglement (par exemple, CPU élevé), l'étape suivante consiste à déterminer qui ou quoi cause la charge actuellement.

À l'aide de Performance Insights, identifiez les Top SQL consommant le plus de charge de base de données (DB Load) pendant la période de dégradation. Si PI n'est pas activé, vous devez vous connecter directement à l'instance de base de données.

Commandes de session spécifiques à la base de données

MySQL/MariaDB

Utilisez SHOW PROCESSLIST pour afficher les requêtes en cours d'exécution. Recherchez les transactions de longue durée (valeur Time élevée) ou les commandes bloquées dans les états Sending data ou Locked.

SHOW FULL PROCESSLIST; 

PostgreSQL

Interrogez la vue pg_stat_activity pour trouver les requêtes actives et leurs événements d'attente. Recherchez les requêtes avec un wait_event_type non nul et des query_start élevés.

SELECT pid, datname, usename, client_addr, application_name, backend_start,
       state, wait_event_type, wait_event, query_start, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY query_start ASC;

Se concentrer sur les événements d'attente (par exemple, les événements d'attente de lock) révèle immédiatement les problèmes de concurrence ou les contentions de verrouillage de schéma qui pourraient paralyser l'ensemble du système.

Étape 3 : Diagnostiquer et optimiser les requêtes lentes

Souvent, une dégradation soudaine est causée par un changement récemment déployé – une nouvelle requête, un plan de requête obsolète ou un index manquant. Utilisez le journal des requêtes lentes (Slow Query Log pour MySQL/MariaDB) ou pg_stat_statements (pour PostgreSQL) combiné aux données de Performance Insights pour identifier les requêtes ayant le plus grand impact.

Analyse des plans d'exécution

Une fois qu'une requête candidate est identifiée, utilisez l'outil de plan d'exécution de la base de données (EXPLAIN ou EXPLAIN ANALYZE) pour comprendre comment la base de données exécute la requête.

  1. Identifier les analyses complètes de table (Full Table Scans) : Un tueur de performance courant. Si une requête analyse une table massive sans utiliser d'index, les performances chuteront.
  2. Vérifier l'utilisation des index : Assurez-vous que la base de données utilise les index optimaux pour les clauses WHERE, les conditions de JOIN et les clauses ORDER BY.

Exemple : Vérification d'un plan de requête

EXPLAIN ANALYZE 
SELECT * FROM large_table WHERE column_a = 'value' AND column_b > 100;

Si le plan montre une mauvaise utilisation de l'index, la résolution immédiate est souvent la création d'un nouvel index ciblé. Pour les requêtes critiques et de longue durée, envisagez de simplifier les jointures ou de diviser les opérations complexes.

Meilleure pratique : L'optimisation des requêtes est la solution à long terme la plus fréquente. Priorisez l'optimisation des requêtes responsables de la charge d'E/S ou de CPU la plus élevée.

Étape 4 : Vérifier la configuration de l'instance et du groupe de paramètres

Si la charge semble normale mais que les ressources (comme la mémoire ou les connexions) sont saturées, le problème peut être un sous-dimensionnement ou des paramètres de configuration sous-optimaux.

Taille et type d'instance

  1. Vérification des crédits des instances T-Series : Si vous utilisez des instances burstables (T-series), vérifiez le solde de crédits CPU dans CloudWatch. Si le solde est tombé à zéro, l'instance est limitée (throttled), ce qui entraîne des chutes de performances catastrophiques. Passez à une classe de performance fixe (M, R ou C) si une charge continue est requise.
  2. Limites de ressources : Vérifiez si la classe d'instance fournit suffisamment de RAM et d'IOPS pour le profil de charge de travail actuel. Si la base de données effectue fréquemment des swaps ou atteint les limites de PIOPS, une mise à niveau (scaling vertical) est nécessaire.

Examen du groupe de paramètres

Vérifiez les paramètres critiques, qui sont souvent mis à l'échelle automatiquement en fonction de la taille de l'instance mais peuvent avoir été écrasés ou réglés trop bas :

  • max_connections : Assurez-vous que ce paramètre (dérivé de la mémoire de l'instance) est adéquat pour la charge maximale.
  • innodb_buffer_pool_size (MySQL) ou shared_buffers (PostgreSQL) : Cette zone de mémoire est essentielle pour la mise en cache des données. S'il est réglé trop petit, la base de données dépendra fortement des E/S disque lentes.

Étape 5 : Examiner la maintenance du système et les opérations secondaires

Parfois, la dégradation des performances est transitoire et causée par des tâches système automatisées ou des processus de réplication en arrière-plan.

Sauvegardes automatisées et fenêtre de maintenance

Vérifiez les paramètres de la fenêtre de maintenance (Maintenance Window) et de la fenêtre de sauvegarde (Backup Window) dans la console RDS. Les instantanés automatisés peuvent introduire une latence d'E/S temporaire, surtout si la charge de travail est déjà élevée. Si la baisse de performance coïncide exactement avec la fenêtre de sauvegarde, envisagez de déplacer la fenêtre à un moment moins critique ou d'assurer que des PIOPS suffisants sont alloués pour gérer la charge pendant la sauvegarde.

Décalage de réplication (Replication Lag)

Si l'application repose sur des réplicas en lecture (Read Replicas), une dégradation soudaine des performances sur l'instance primaire peut entraîner un décalage de réplication sévère. Un décalage de réplication élevé indique que l'instance primaire ne peut pas traiter les modifications assez rapidement, ce qui renvoie souvent aux problèmes trouvés à l'étape 3 (requêtes lentes) ou à l'étape 4 (ressources sous-dimensionnées).

Surveillez la métrique ReplicaLag dans CloudWatch. Si le décalage est significatif, concentrez les efforts de dépannage sur le taux de transaction et l'optimisation de l'instance primaire.

Journalisation binaire (WAL Archive)

Dans les environnements à forte transaction, une journalisation binaire excessive (archivage WAL dans PostgreSQL) nécessaire pour la réplication ou la récupération à un instant précis peut solliciter les E/S. Si une latence d'E/S est confirmée comme étant le goulot d'étranglement, assurez-vous que la rétention de la journalisation binaire et les paramètres de taille des fichiers sont optimisés pour la charge de travail.


Conclusion

Dépanner les chutes soudaines de performance RDS nécessite une approche disciplinée, passant systématiquement des métriques générales (Étape 1) à l'analyse de code spécifique (Étape 3) et enfin à la confirmation des limites de configuration (Étapes 4 et 5). En tirant parti d'AWS Performance Insights et des commandes de diagnostic de base de données standard, les équipes peuvent réduire considérablement le temps moyen de résolution (MTTR) et restaurer la fonction optimale de la base de données. La surveillance continue de la charge de la base de données (DB Load), de la latence des E/S et des paramètres clés du système est la meilleure défense contre toute dégradation future inattendue.