Pourquoi les requêtes s’exécutent-elles lentement dans mon cluster Amazon DocumentDB ?
Je souhaite résoudre les problèmes liés à la lenteur d’exécution des requêtes dans mon cluster Amazon DocumentDB (compatible avec MongoDB) afin d'améliorer les performances.
Résolution
Vous pouvez observez une lenteur d’exécution des requêtes dans votre cluster Amazon DocumentDB pour les raisons suivantes :
- Matériel sous-dimensionné
- Modifications de la charge de travail
- Trafic accru
- Problèmes de mémoire
- Plans de requête sous-optimaux
Surveiller votre charge de travail
Pour comprendre la cause première des problèmes de performances de votre base de données, vérifiez toutes les ressources utilisées par votre instance à l'échelle du serveur. Surveillez votre charge de travail et déterminez quand les performances de la requête étaient optimales et quand la requête a commencé à mettre du temps à s’exécuter.
Utiliser les métriques Amazon CloudWatch
Utilisez les métriques CloudWatch pour Amazon DocumentDB afin d’analyser les performances de votre cluster. Pour identifier les goulots d'étranglement de performances liés à des ressources insuffisantes, utilisez des métriques telles que CPUUtilization et FreeableMemory. Pour comprendre l'optimisation de la mémoire, utilisez des métriques telles que BufferCacheHitRatio et LowMemNumOperationsThrottled.
Surveillez les métriques de niveau opérationnel pour comprendre la charge de travail de votre instance. Métriques utiles telles que DocumentsInserted, DocumentsReturned, DocumentsDeleted et TransactionsAborted. Pour plus d'informations, consultez la section Surveillance des métriques et configuration d’alarmes sur vos clusters Amazon DocumentDB (compatible avec MongoDB).
Utiliser Performance Insights
Utilisez Performance Insights pour évaluer les charges de travail de votre base de données découpées en fonction des attentes, des requêtes, des hôtes, des bases de données et des applications. Capturez des informations détaillées sur les compteurs et les requêtes, et évaluez quelles requêtes contribuent le plus à la charge de base de données. Une charge de base de données supérieure à la valeur du nombre maximal de processeurs virtuels indique une charge de travail limitée sur la classe d'instance. Analysez le texte de la requête pour affiner vos requêtes.
Utiliser les journaux du profileur
Utilisez le profileur Amazon DocumentDB pour consigner la durée d'exécution et les détails des opérations effectuées sur votre cluster. Le profileur vous permet de surveiller les opérations les plus lentes de votre cluster. Cela vous permet d'améliorer les performances des requêtes individuelles et les performances globales du cluster.
Utiliser des méthodes de base de données
Exécutez régulièrement la commande currentOp() suivante sur votre instance Amazon DocumentDB pour surveiller l'utilisation du système au fil du temps :
db.adminCommand({currentOp: 1, $all: 1});
Pour compter le nombre de requêtes et d'opérations dans chaque espace de noms du système, exécutez la commande suivante :
db.adminCommand({ aggregate: 1, pipeline: [ { $currentOp: { allUsers: true, idleConnections: true } }, { $group: { _id: { desc: "$desc", ns: "$ns", WaitState: "$WaitState" }, count: { $sum: 1 } } } ], cursor: {} });
Après avoir exécuté la commande, analysez les résultats d'utilisation du système pour comprendre la charge sur le système et prendre les mesures appropriées.
Optimiser vos requêtes
Après avoir identifié les requêtes de longue durée, ajustez vos requêtes pour améliorer leurs performances.
Utiliser le planificateur de requêtes approprié
Pour améliorer les performances, utilisez des plans d'index optimaux et activez la prise en charge de l’analyse d'index pour vos opérateurs. Pour Amazon DocumentDB version 5.0 et versions ultérieures, utilisez le planificateur version 2.0 pour tirer parti d'un planificateur de requêtes avancé qui optimise les opérations fondamentales telles que les commandes de recherche, de mise à jour, de suppression et de recherche et modification. Pour les modèles de requête spécifiques pour lesquels l'index optimal n'est pas sélectionné, ce dernier ajoute la prise en charge de la fonctionnalité de filtre de cache de plan qui vous permet de spécifier une liste d'index correspondant à une forme de requête spécifique.
Analyser les statistiques d'une requête
Pour optimiser les performances des requêtes, utilisez executionStats pour analyser le fonctionnement de vos requêtes. executionStats fournit le nombre de documents traités à chaque étape de requête, la durée d'exécution de chaque étape et le nombre de tentatives effectuées pour générer un plan de requête.
Pour consulter les statistiques de votre requête, exécutez la commande suivante :
query.explain("executionStats");
Exemple d'opération :
db.collection.find({}).limit(2).explain("executionStats");
L'exemple d'opération précédent analyse les performances d'une requête lorsque vous essayez de trouver deux documents.
Examinez les statistiques renvoyées. Vous pouvez ajouter un index pour réduire le nombre d’analyses de collection complètes et limiter le nombre de documents qui doivent être analysés par la requête. Il est recommandé de tester tous les nouveaux index et d'évaluer les performances. Utilisez l'option de clonage ou de restauration d’instantanés pour créer un environnement de test.
Vérifier que votre instance ne contient pas d'index inefficaces
Chaque index entraîne une latence d'écriture supplémentaire, une utilisation du processeur, des opérations d'E/S et une augmentation de l'espace de stockage global utilisé sur votre ressource. Bien que les index puissent améliorer les performances des requêtes, il est recommandé de les consulter régulièrement et de supprimer les index non utilisés.
Pour voir une répartition de la fréquence d'accès à chaque index, exécutez une commande similaire à l'exemple suivant :
db.collection.aggregate([{$indexStats:{}}]).pretty()
Pour afficher le nombre total d'analyses effectuées avec des index (analyses d'index), exécutez la commande suivante :
db.collection.stats()
Comparez le nombre de la requête précédente au nombre d’analyses effectuées sans index (analyses de collection). Analysez ensuite la fréquence à laquelle les opérations utilisent des index lorsqu'elles accèdent à une collection.
Fermer les curseurs inactifs de votre instance
Les instances Amazon DocumentDB ont une limite quant au nombre de curseurs actifs ouverts à un moment donné. Le type d'instance que vous utilisez détermine cette limite. Pour en savoir plus, consultez la section Limites d'instance. Utilisez CloudWatch pour surveiller la métrique DatabaseCursors dans CloudWatch afin de vérifier le nombre de curseurs ouverts.
Pour en savoir plus sur les curseurs ouverts, exécutez une commande similaire à l'exemple suivant :
db.runCommand("listCursors")
Il est recommandé de fermer les curseurs après les avoir utilisés pour éviter toute limitation. Les curseurs inactifs utilisent le processeur et la mémoire pour surveiller la file d'attente qui leur est associée.
Informations connexes
Résolution des problèmes liés aux performances et à l’utilisation des ressources
- Sujets
- Database
- Balises
- Amazon DocumentDB
- Langue
- Français

Contenus pertinents
- demandé il y a 2 ans
- demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a 6 mois
AWS OFFICIELA mis à jour il y a 7 mois