MySQL utilisation élevée de l'UC
Récemment, mon PROCESSEUR du serveur a été très élevé.
Charge CPU moyennes 13.91 (1 min), à 11,72 (5 minutes) 8.01 (15 minutes) et mon site n'a eu qu'une légère augmentation du trafic.
Après l'exécution d'une commande en haut, j'ai vu MySQL a l'aide de 160% du CPU!
Récemment, j'ai eu l'optimisation des tables et j'ai passé à les connexions persistantes. Cela pourrait-il être la cause de MySQL à utiliser de grandes quantités de CPU?
- Les connexions persistantes sont presque toujours pas la bonne chose à utiliser.
- je vais les prendre maintenant et regarder pour une différence parce que je ne me souviens jamais le cpu étant au-dessus de 2 il y a un mois!
- Les serveurs ont tendance à avoir plus d'un noyau. Pour cent l'utilisation du PROCESSEUR est calculée par rapport à un noyau, anotherwords un processus à l'aide de deux cœurs complètement aura une utilisation du PROCESSEUR de 200%. Ici, MySQL utilise 100% d'un seul cœur et 60% d'un autre cœur. Cela ne signifie pas que tous les Processeurs sont utilisés, plus il est probable qu'il a encore au moins deux Processeurs.
- CPU élevée signifie presque toujours inefficace des requêtes. Telles sont généralement résolu par une meilleure indexation (en particulier les "composite") et/ou la reformulation de la requête.
Vous devez vous connecter pour publier un commentaire.
D'abord, je dirais que vous voudrez probablement désactiver les connexions persistantes comme ils ont presque toujours en faire plus de mal que de bien.
Deuxièmement, je dirais que vous voulez vérifier vos utilisateurs MySQL, juste pour s'assurer qu'il n'est pas possible pour quiconque de se connecter à partir d'un serveur distant. C'est aussi un de sécurité majeur chose à vérifier.
Troisièmement, je dirais que vous souhaitez activer sur le MySQL Requête Lente Journal de garder un œil sur les requêtes qui prennent beaucoup de temps, et l'utiliser pour vous assurer de ne pas avoir toutes les requêtes de verrouillage de la clé de tables pour trop longtemps.
Quelques autres choses que vous pouvez vérifier serait d'exécuter la requête suivante, tandis que la charge du PROCESSEUR est élevée:
Cela va vous montrer toutes les requêtes qui sont actuellement en cours d'exécution ou dans la file d'attente pour s'exécuter, ce que la requête est et ce qu'il fait (cette commande va tronquer la requête s'il est trop long, vous pouvez utiliser SHOW FULL PROCESSLIST pour voir l'intégralité du texte de la requête).
Vous aurez également besoin de garder un oeil sur des choses comme votre taille de mémoire tampon, table de cache, mise en cache de requêtes et innodb_buffer_pool_size (si vous utilisez les tables innodb) que l'ensemble de ces allocations de mémoire peut avoir un effet sur les performances des requêtes qui peuvent causer MySQL de bouffer du CPU.
Vous aurez également probablement souhaitez donner à la suite d'une lecture plus car ils contiennent de l'information de qualité.
C'est aussi une très bonne idée d'utiliser un profiler. Quelque chose que vous pouvez activer quand vous le souhaitez qui va vous montrer ce que les requêtes de votre application est en cours d'exécution, si il y a doublon requêtes, combien de temps ils prennent, etc, etc. Un exemple de quelque chose comme cela, c'est celui que j'ai été travailler sur appelé PHP Profiler mais il ya beaucoup là-bas. Si vous êtes à l'aide d'un morceau de logiciel comme Drupal, Joomla ou WordPress, vous aurez envie de demander autour de l'intérieur de la communauté, car il y a probablement des modules disponibles pour eux et qui permettent d'obtenir cette information sans avoir à intégrer manuellement quoi que ce soit.
Comme c'est le top du post si vous google pour MySQL utilisation élevée de l'UC ou de la charge, je vais ajouter une autre réponse:
Le 1er juillet 2012, un saut de seconde a été ajoutée à l'heure UTC-temps pour compenser le ralentissement de la rotation de la terre à cause des marées. Lors de l'exécution de ntp (ou ntpd), cette deuxième a été ajoutée à votre ordinateur/l'horloge du serveur. MySQLd n'a pas l'air d'aimer cette seconde sur certains OS es, et donne une charge élevée de l'UC. Le quick fix est (en tant que root):
date
" && service ntp start MySQL utilisation de l'UC instantanément baissé de 50 - 100% 0 - 1%SHOW PROCESSLIST
n'avait rien à me dire. Google m'a dirigé ici la bonne solution 🙂sudo service ntpd stop
sur cette configuration.date
de commande pour éviter uneinvalid date
erreur (problème de langage):date -s "$(LC_ALL=C date )"
.mysqld
était de 77% de CPU pendant des mois au ralenti et c'est tombé à 0,3%.service ntp stop && date -s "`date`" && service ntp start
Si ce serveur est visible de l'extérieur, Il vaut la peine de vérifier si c'est d'avoir beaucoup de demandes de contact du monde extérieur (c'est à dire des gens qui tentent de percer il)