Surveillance des performances et des ressources spécifiques à l'instance - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Surveillance des performances et des ressources spécifiques à l'instance

La surveillance au niveau de l'instance est essentielle pour comprendre l'asymétrie des connexions, l'asymétrie de la charge de travail et l'asymétrie des données, ainsi que pour savoir quand ajouter des routeurs ou diviser des partitions pour augmenter le débit tout en préservant la latence.

Présentation de

Lorsque votre application émet une requête, celle-ci traverse un système distribué sophistiqué avant de renvoyer des résultats. Une SELECT instruction apparemment simple peut toucher plusieurs instances de base de données, chacune jouant un rôle distinct dans le traitement de votre demande. Comprendre ce parcours et les instances qui le sous-tendent transforme la façon dont vous concevez des applications, interprétez les données de surveillance et diagnostiquez les problèmes de performance.

Ce guide fournit des informations techniques approfondies sur l'architecture des instances :

  • Actualisation illimitée de l'architecture, routeur et partitions

  • Quand et comment adapter chaque type d'instance pour répondre à vos exigences en matière de performances et de capacité

  • Comment surveiller, dépanner et optimiser les performances au niveau de l'instance

  • Meilleures pratiques pour la conception d'applications qui exploitent efficacement l'architecture distribuée

Principes fondamentaux de l'architecture d'instance

atteint une évolutivité horizontale grâce à une séparation fonctionnelle entre deux types d'instances spécialisées :

  • Les instances de routeur fournissent la couche d'orchestration : elles acceptent les connexions des clients, analysent les requêtes, coordonnent les opérations distribuées et regroupent les résultats. Les routeurs sont apatrides, ce qui signifie qu'ils ne stockent pas de données et peuvent être ajoutés ou supprimés sans migration de données.

  • Les instances Shard fournissent les données et la couche de calcul : elles stockent les données des tables, exécutent des requêtes sur des données locales et gèrent les transactions. Les partitions sont dynamiques, chacune possédant un sous-ensemble spécifique de vos données déterminé par un hachage cohérent.

Cette séparation permet d'adapter la gestion des connexions, la coordination des requêtes et le stockage des données indépendamment en fonction des caractéristiques de votre charge de travail.

Comparaison entre routeurs et partitions

Caractéristiques Instances de routeur Instances partagées
Rôle principal Coordination et distribution des requêtes Stockage des données et exécution des requêtes
State Apatride (pas de stockage de données) Stateful (possède les données)
Capacité de mise à l’échelle Ajouter/supprimer instantanément Nécessite un rééquilibrage des données
Focalisation sur les ressources Processeur pour la coordination ; mémoire modérée Processeur pour les requêtes ; mémoire élevée pour le cache
Déclencheur de Nombre de connexions élevé, débit TXN distribué Processeur, volume de données et débit de requêtes élevés

Surveillance des performances d'instance

Comprendre les performances au niveau de l'instance est essentiel pour fonctionner efficacement. La surveillance spécifique à l'instance révèle les modèles de distribution qui ont un impact sur les performances : distorsion de la connexion, distorsion de la charge de travail et distorsion des données.

Détection du biais

Dans un déploiement idéal, la charge de travail et les ressources sont réparties uniformément entre les instances. Dans la pratique, les applications subissent souvent une distribution asymétrique, c'est-à-dire inégale, qui concentre la charge sur des instances spécifiques.

Trois types de biais à surveiller :

  • Déséquilibre de connexion : répartition inégale des connexions client entre les routeurs

  • Déséquilibre de charge de travail : charge de requête inégale entre les partitions en raison des touches de raccourci

  • Déséquilibre des données : volume de données inégal entre les partitions en raison de la fréquence des touches des partitions

Distribution de charge de Database Insights

Le moyen le plus rapide d'évaluer l'état de santé au niveau de l'instance est la vue de répartition de charge de Database Insights, qui fournit une visibilité immédiate sur la manière dont les sessions actives se répartissent entre les instances.

Pour accéder à la distribution de charge :

  1. Accédez à la console RDS → Votre cluster illimité

  2. Sélectionnez l'onglet « Performance Insights »

  3. Cliquez sur la section « Répartition de la charge »

Schéma sain : charge répartie de manière relativement uniforme entre les instances

  • Les routeurs peuvent afficher un AAS légèrement supérieur à celui des partitions (surcharge de coordination)

  • Les valeurs AAS des partitions situées à 20 % les unes des autres indiquent un bon équilibre

En ce qui concerne le schéma : concentration significative sur des cas spécifiques

  • Un routeur avec plus de 70 % de la charge du routeur → Déséquilibre de connexion

  • Une partition avec plus de 50 % de la charge de partition → Charge de travail ou inclinaison des données

  • Grande variation entre les partitions → Étudier la distribution des clés des partitions

CloudWatch métriques

Pour une analyse plus approfondie allant au-delà de Database Insights, CloudWatch fournit des métriques spécifiques à l'instance qui révèlent les modèles d'utilisation des ressources.

La ServerlessDatabaseCapacity métrique avec dimension DBShardGroupInstance indique la consommation d'ACU par instance, fournissant ainsi la vue la plus directe de l'utilisation des ressources.

Quand effectuer une enquête :

  • Variance ACU du routeur > 30 % → Déséquilibre de connexion ou concentration de charge de travail entre partitions

  • Variance de l'ACU partagée > 40 % → Insymétrie des données ou de la charge de travail

  • Toute instance toujours au maximum de l'ACU → Contrainte de capacité

Surveillance et dépannage des routeurs

Les routeurs peuvent rencontrer des problèmes de performances dus à deux causes principales : la distribution inégale des connexions et la concentration de la charge de travail entre les partitions.

Sessions inégalement réparties

Symptôme : un routeur gère une part disproportionnée des connexions

Cause première : la mise en cache DNS entraîne la résolution de plusieurs demandes de connexion vers le même point de terminaison du routeur.

Le plus fréquent pendant :

  • Analyse comparative avec des outils tels que pgbench

  • Initialisation du pool de connexions (de nombreuses connexions établies rapidement)

  • Le serveur d'applications redémarre

Remèdes :

  • Assurez-vous d'utiliser le point de terminaison Limitless spécifié dans la console

  • Équilibrage manuel : extrayez les points de terminaison du routeur et connectez différentes applications à différents routeurs

  • Pour les applications libpq, utilisez la fonctionnalité LOADBALANCEHOSTS

  • Pour les applications JDBC, utilisez le plugin de connexion Limitless

  • Utiliser un NLB pour gérer les sessions et les distributions

Surveillance et résolution des problèmes liés aux partitions

Les shards rencontrent des problèmes de performances dus à trois causes principales : les contraintes en matière de ressources, l'asymétrie des données et l'asymétrie de la charge de travail.

Utilisation des ressources partagées

Une partition dotée de clés de partition populaires comportera davantage de données et une charge de travail plus importante. Cela se traduit par une utilisation des ressources, c'est-à-dire que l'instance consommera davantage ACUs.

Stratégies de remédiation :

  1. Réévaluez la sélection des clés de partition : passez en revue la cardinalité des clés de partition et les modèles d'accès. Envisagez des clés de partition composites pour une meilleure distribution.

  2. Diviser la partition : répartir la charge sur un plus grand nombre d'instances de partition

Quand fractionner des fragments :

  • Une seule partition constante à > 80 % maximum de l'ACU

  • Débit de requêtes limité par la capacité d'une seule partition

Volumes de données partagés

Utilisez les fonctions SQL pour interroger les volumes de données :

SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;

Pour afficher les données par table et par partition :

SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');

Résoudre les inégalités d'utilisation

Lorsque la charge de travail ou l'asymétrie des données se concentre sur des partitions spécifiques, le fractionnement des partitions redistribue la charge sur un plus grand nombre d'instances.

Considérations importantes :

  • Les touches de partition à déplacer ne peuvent pas être contrôlées

  • Il n'existe aucun moyen d'annuler une scission sans rétablir un instantané manuel pris avant la scission.

  • Toutes les instances, y compris une nouvelle partition, consomment le minimum d'ACU lorsqu'elles sont inactives

La division des partitions permet une mise à l'échelle plus poussée, et les divisions de partitions consécutives permettent d'obtenir un débit plus élevé et une mise à l'échelle plus poussée, tout en conservant une faible latence.

Limitations

Soyez conscient de ces contraintes opérationnelles :

Limites du routeur :

  • Les routeurs ne peuvent pas être supprimés : une fois ajoutés, les routeurs restent dans le cluster

  • Planifiez soigneusement les ajouts de routeurs pour éviter des coûts de base inutiles

Limites du partage :

  • Les partitions ne peuvent pas être fusionnées - Les divisions de partitions sont des opérations unidirectionnelles

  • Seule option de restauration : restauration à partir d'un instantané pris avant le fractionnement

Stratégies d'atténuation :

  • Commencez par un nombre minimum d'instances viables

  • Ajoutez de la capacité de manière incrémentielle selon les besoins

  • Prendre des instantanés avant les modifications topologiques majeures

  • Surveillez les coûts de référence à mesure que le cluster se développe