Solution 1 :
Voici quelques outils pour trouver l'activité du disque :
iotop
vmstat 1
iostat 1
lsof
strace -e trace=open <application>
strace -e trace=open -p <pid>
En ps auxf
vous verrez également quels processus sont en veille disque ininterprétable (D
) car ils attendent des E/S.
Certains jours la charge augmente pour atteindre 40 sans augmentation du nombre de visiteurs.
Vous pouvez également créer une sauvegarde et voir si le disque dur échoue lentement. Un disque dur commence généralement à ralentir avant de mourir. Cela pourrait également expliquer la charge élevée.
Solution 2 :
La sortie du haut suggère que le SGBD subit la plupart des attentes d'E/S, donc les problèmes de réglage de la base de données sont un candidat évident à étudier.
Les E/S en attente sur un serveur de base de données - en particulier lors de pics de charge - indiquent que votre SGBD peut être lié au disque (c'est-à-dire que vous avez besoin d'un sous-système de disque plus rapide) ou qu'il peut avoir un problème de réglage. Vous devriez probablement également envisager de profiler votre serveur de base de données - c'est-à-dire obtenir une trace de ce qu'il fait et des requêtes qui prennent du temps.
Quelques points de départ pour diagnostiquer les problèmes de réglage de la base de données :-
-
Recherchez les requêtes qui prennent le plus de temps et examinez les plans de requête. Voyez s'il y en a qui ont des plans de requête étranges, comme une analyse de table là où il ne devrait pas être. Peut-être que la base de données a besoin d'un index ajouté.
-
De longs temps d'attente pour les ressources peuvent signifier que certains pools de ressources clés doivent être élargis.
-
De longs temps d'attente d'E/S peuvent signifier que vous avez besoin d'un sous-système de disque plus rapide.
-
Vos volumes de journaux et de données sont-ils sur des disques distincts ? Les journaux de base de données comportent de nombreuses petites écritures séquentielles (essentiellement, ils se comportent comme un tampon en anneau). Si vous avez une charge de travail à accès aléatoire occupée partageant les mêmes disques que vos journaux, cela affectera de manière disproportionnée le débit de la journalisation. Pour qu'une transaction de base de données soit validée, les entrées du journal doivent être écrites sur le disque, ce qui créera un goulot d'étranglement sur l'ensemble du système.
Notez que certains moteurs de stockage MySQL n'utilisent pas de journaux, cela peut donc ne pas être un problème dans votre cas.
Note de bas de page :Systèmes de file d'attente
Les systèmes de file d'attente (un modèle statistique de débit) deviennent hyperboliquement plus lents à mesure que le système approche de la saturation. Pour une approximation de haut niveau, un système saturé à 50 % a une longueur de file d'attente moyenne de 2. Un système saturé à 90 % a une longueur de file d'attente de 10, un système saturé à 99 % a une longueur de file d'attente de 100.
Ainsi, sur un système proche de la saturation, de petits changements de charge peuvent entraîner de grands changements dans les temps d'attente, se manifestant dans ce cas par du temps passé à attendre les E/S. Si la capacité d'E/S de votre sous-système de disque est presque saturée, de petits changements de charge peuvent entraîner des changements significatifs dans les temps de réponse.
Solution 3 :
Exécutez iotop
, ou atop -dD
, pour voir ce que font les processus io. Utilisez strace
si vous avez besoin de regarder de plus près.