181 votes

Utilisation élevée du processeur MySQL

Récemment, l'unité centrale de mon serveur a atteint un niveau très élevé.

La charge CPU est en moyenne de 13,91 (1 min) 11,72 (5 min) 8,01 (15 min) et mon site n'a connu qu'une légère augmentation du trafic.

Après avoir exécuté une commande top, j'ai vu que MySQL utilisait 160% du CPU !

Récemment, j'ai optimisé les tables et je suis passé aux connexions persistantes. Est-ce que cela pourrait amener MySQL à utiliser de grandes quantités de CPU ?

249voto

Steven Surowiec Points 3833

Tout d'abord, je dirais que vous devriez probablement désactiver les connexions persistantes, car elles font presque toujours plus de mal que de bien.

Ensuite, je dirais que vous devez vérifier les utilisateurs de MySQL, pour vous assurer qu'il n'est pas possible que quelqu'un se connecte depuis un serveur distant. C'est également un élément de sécurité important à vérifier.

Troisièmement, je dirais que vous voulez allumer le Requête MySQL lente Log pour garder un œil sur toutes les requêtes qui prennent beaucoup de temps, et utilisez-le pour vous assurer que vous n'avez pas de requêtes qui bloquent les tables clés pendant trop longtemps.

Vous pouvez également vérifier que la requête suivante est exécutée lorsque la charge du processeur est élevée :

SHOW PROCESSLIST;

Cette commande vous montrera toutes les requêtes en cours d'exécution ou dans la file d'attente pour être exécutées, la nature de la requête et ce qu'elle fait (cette commande tronquera la requête si elle est trop longue, vous pouvez utiliser SHOW FULL PROCESSLIST pour voir le texte complet de la requête).

Vous devrez également garder un œil sur des éléments tels que la taille de vos tampons, cache de table , cache pour les requêtes et innodb_buffer_pool_size (si vous utilisez des tables innodb) car toutes ces allocations de mémoire peuvent avoir un effet sur les performances des requêtes, ce qui peut faire consommer du CPU à MySQL.

Vous voudrez probablement aussi lire les documents suivants, qui contiennent de bonnes informations.

C'est aussi une très bonne idée d'utiliser un profileur. Quelque chose que vous pouvez activer quand vous le souhaitez et qui vous montrera quelles requêtes votre application exécute, s'il y a des requêtes en double, combien de temps elles prennent, etc, etc. Un exemple de quelque chose de ce genre est celui sur lequel j'ai travaillé et qui s'appelle PHP Profiler mais il en existe beaucoup. Si vous utilisez un logiciel comme Drupal, Joomla ou Wordpress, renseignez-vous auprès de la communauté, car il existe probablement des modules disponibles qui vous permettent d'obtenir ces informations sans avoir à intégrer manuellement quoi que ce soit.

165voto

wwwhizz Points 1066

Étant donné qu'il s'agit de l'article principal si vous recherchez sur Google une utilisation ou une charge élevée du processeur MySQL, je vais ajouter une réponse supplémentaire :

Hier, une seconde intercalaire a été ajoutée à l'heure UTC actuelle pour compenser le ralentissement de la rotation de la terre dû aux marées. Lorsque vous exécutez ntp (ou ntpd), cette seconde a été ajoutée à l'horloge de votre ordinateur/serveur. MySQLd ne semble pas apprécier cette seconde supplémentaire sur certains systèmes d'exploitation, et génère une charge CPU élevée. La solution rapide est (comme Root) :

$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start

30voto

Rowland Shaw Points 22860

Si ce serveur est visible de l'extérieur, il est intéressant de vérifier s'il reçoit de nombreuses demandes de connexion de l'extérieur (c'est-à-dire de personnes essayant de s'y introduire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X