web-dev-qa-db-fra.com

MySQL utilisation élevée du processeur

Récemment, le processeur de mon serveur a été très élevé.

La charge moyenne du processeur est 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 processeur!

Récemment, j'ai optimisé les tables et je suis passé aux connexions persistantes. Cela pourrait-il amener MySQL à utiliser beaucoup de temps processeur?

176
Juddling

Premièrement, je dirais que vous voulez probablement désactiver les connexions persistantes, car elles font presque toujours plus de mal que de bien.

Deuxièmement, je dirais que vous voulez vérifier vos utilisateurs MySQL, juste pour vous assurer que personne ne puisse se connecter depuis un serveur distant. C’est aussi une question de sécurité majeure à vérifier.

Troisièmement, je dirais que vous souhaitez activer le MySQL Slow Query Log pour garder un œil sur les requêtes qui prennent beaucoup de temps et vous en servir pour vous assurer qu'aucune requête ne se verrouille. des tables de touches trop longtemps.

Une autre chose que vous pouvez vérifier serait d’exécuter la requête suivante lorsque la charge du processeur est élevée:

SHOW PROCESSLIST;

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

Vous voudrez également garder un œil sur des choses comme la taille de votre tampon, cache de table , cache de requête et innodb_buffer_pool_size (si vous utilisez tables innodb) car toutes ces affectations de mémoire peuvent affecter les performances des requêtes, ce qui peut entraîner une consommation excessive de ressources processeur par MySQL.

Vous voudrez probablement aussi lire ce qui suit, car ils contiennent de bonnes informations.

C'est aussi une très bonne idée d'utiliser un profileur. Un élément que vous pouvez activer quand vous le souhaitez vous indiquera les requêtes exécutées par votre application, les requêtes dupliquées, leur durée, etc. Un exemple de ce type de projet est celui sur lequel j'ai travaillé et appelé PHP Profiler mais il y en a beaucoup. Si vous utilisez un logiciel comme Drupal, Joomla ou Wordpress, vous aurez envie de poser des questions au sein de la communauté car il existe probablement des modules disponibles pour eux qui vous permettent d'obtenir cette information sans avoir besoin de l'intégrer manuellement. n'importe quoi.

243
Steven Surowiec

Comme il s'agit du message le plus important si vous utilisez Google pour une utilisation ou une charge de processeur élevée, je vais ajouter une réponse supplémentaire:

Le 1er juillet 2012, une seconde intercalaire a été ajoutée au temps UTC actuel pour compenser le ralentissement de la rotation de la Terre due aux marées. Lors de l'exécution de ntp (ou ntpd), cette seconde a été ajoutée à l'horloge de votre ordinateur/serveur. MySQLd ne semble pas aimer cette seconde supplémentaire sur certains systèmes d’exploitation et génère une charge de processeur élevée. La solution rapide est (en tant que root):

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

Si ce serveur est visible par le monde extérieur, nous vous conseillons de vérifier s’il reçoit beaucoup de demandes de connexion du monde extérieur (c’est-à-dire des personnes qui tentent de le percer).

30
Rowland Shaw