Multi cœurs et performances MySQL

38

L’importance de la RAM est un fait établi, mais on dispose de beaucoup moins de données sur l’importance des cœurs et du multithreading en matière d’utilisation du processeur par MySQL. Je parle de la différence de courir MySQL sur 4cores vs 6cores vs 8cores et ainsi de suite.

Est-ce que différents moteurs de stockage utilisent le processeur différemment?

Rick James
la source
ses corrélations mais ne traitent pas des comportements de moteurs de stockage différents vis-à-vis de processeurs multicœurs.
Rick James
1
Effectivement. C’est la raison pour laquelle il n’existe pas de vote "proche du double" ...
gbn
C'est une communauté merveilleuse, j'apprends encore à utiliser ce site.
Rick James
Bonjour mon pote, jetez un oeil ici: mysql-cluster-blog.com vous trouvez au moins quelque chose

Réponses:

30

En ce qui concerne MySQL, il n’existe aucune comparaison entre les moteurs de stockage, à part le fait qu’il entre dans deux catégories de base:

MySQL utilise plusieurs moteurs de stockage

En ce qui concerne les moteurs de stockage répertoriés, InnoDB et NDB sont les seuls à être compatibles ACID. Pourquoi est-ce important de le mentionner? Deux raisons:

  • Les autres moteurs de stockage ne bénéficient tout simplement pas de la présence de plus de cœurs, mis à part les E / S de disque de base, l'utilisation du processeur et le débit global.
  • Le code de chaque moteur de stockage non transactionnel, qui régit 14 opérations internes, quel que soit le moteur de stockage, n'a pas été conçu pour tirer parti de l'accès à plusieurs cœurs.

InnoDB sous MySQL 5.5, InnoDB Plugin), et la XtraDB de Percona Server disposent d’options que vous pouvez définir pour pouvoir accéder à plusieurs cœurs (Percona Server le fait depuis plus longtemps). En fait, Percona injecte environ 30 000 lignes de code dans le but d’améliorer les performances d’InnoDB à chaque nouvelle version GA du code source MySQL. Nous pouvons être sûrs qu'Oracle a intégré ses propres améliorations issues de leur propre groupe de réflexion à InnoDB pour les opérations multicœurs (depuis MySQL 5.1.38).

Avec la nécessité d'exécuter MVCC sur des données conjointement avec le verrouillage des lignes / pages, les performances des transactions peuvent désormais être instrumentées, mesurées et configurées.

S'il y a une chose que j'ai appris sur l'utilisation de plusieurs cœurs, c'est que vous devez optimiser InnoDB et ne pas simplement vous fier à InnoDB .

MISE À JOUR 2011-09-20 08:03 EDT

En ce qui concerne InnoDB, qui tire parti de tous les cœurs, nous devons rester vigilants. Les cœurs doivent également s'occuper d'autres problèmes (système d'exploitation, disque, mémoire, applications, surveillance, etc.) dans le serveur de base de données. Pour ceux qui ont des budgets modestes, beaucoup ont tendance à avoir un serveur de base de données qui fournit également NFS, la surveillance de Munin, le support d'applications pour JBoss, PHP, etc. Si vous voulez que MySQL, et plus particulièrement InnoDB, utilise plus de cœurs, le serveur de base de données doit être exclusivement dédié à MySQL et le système d'exploitation / disque / mémoire ne doit fonctionner que sur MySQL . Dans cette perspective, InnoDB impliquera plus de cœurs sans aucun doute .

Quant à InnoDB Plugin, il a été mentionné simplement pour montrer les initiatives précédentes visant à obtenir un meilleur InnoDB de la part de MySQL (hein, Oracle. Désolé, je ne tire pas encore la langue.) MySQL 5.1.38 indiquait de nouvelles variables pour appeler plus d’activité principale.

Par exemple, innodb_read_io_threads et innodb_write_io_threads (les deux depuis MySQL 5.1.38) allouent le nombre spécifié de threads pour les lectures et les écritures. La valeur par défaut est 4 et la valeur maximale est 64. Les paramètres par défaut et max étant si différents (4 - 64), InnoDB indique qu'AndoDB est aussi multithread et aussi intensif que vous le configurez !!!

Percona a pris en charge les besoins de la communauté MySQL pour accéder à davantage de cœurs avec InnoDB. En conséquence, MySQL a commencé à faire de même. Je dois admettre que Oracle (beurk) a apporté les améliorations nécessaires pour renforcer l'activité principale.

RolandoMySQLDBA
la source
InnoDB sous MySQL 5.5 optimisé comme vous l’avez suggéré plus haut peut-il bénéficier de tous les cœurs? {peu confus sur le plugin InnoDB}
Rick James
@Rick - A répondu à votre commentaire dans ma réponse
RolandoMySQLDBA
Ici, cela semble être une histoire complètement différente et MyISAM semble tomber à plat quand il s'agit d'utiliser plusieurs cœurs, mais de l'autre côté, à l' adresse dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb, MyISAM avantages Donc, il semble y avoir un lien pour décider quel chemin aller.
Rick James
2
Tout dépend du but que vous utilisez pour utiliser MyISAM ou InnoDB. Quoi et combien êtes-vous prêt à mettre en cache? Utilisez-vous MySQL ou d’autres mécanismes de mise en cache (tels que vernis et memcached) pour récupérer les données? Votre matériel est-il correctement mis à l'échelle pour InnoDB? Est-ce que 98% de vos sélections SQL? La table est-elle au meilleur format pour les lectures à grande vitesse? Répondre à ces questions à l'avance devrait nous guider sur la sélection du moteur de stockage, la configuration appropriée, le choix du matériel, voire même d'atteindre des objectifs plus profonds tels que la haute disponibilité, la topologie de base de données, le fractionnement lecture / écriture, et cette liste peut s'allonger.
RolandoMySQLDBA le
9

Je trouve que parler de moteurs de stockage utilisant des cœurs peut être trompeur pour les débutants. À condition qu'un programme soit suffisamment multithread, le système d'exploitation le planifie sur autant de cœurs que possible.

Le problème spécifique qui limite la mise à l'échelle de l'unité centrale est lorsque le code de verrouillage interne ( mutex ) a des conflits et empêche les threads de s'exécuter simultanément. Tous les moteurs de stockage nécessiteront des mutex, mais il y en a certainement des plus chauds dans MyISAM.

Si nous ignorons une seconde la controverse sur les mutex et revenons à votre question principale: à quel point est-il important d'avoir plusieurs cœurs? -

J'aime disposer de nombreux cœurs pour les charges de travail servant les demandes des utilisateurs. Avoir beaucoup peut réduire les écarts entre les temps de requête. Pensez-y comme si vous faisiez la queue au super marché avec 12 allées ouvertes contre seulement 2.

Mise à jour : j'ai écrit un article de blog sur pourquoi l'importance de l'évolutivité verticale (multi-cœurs) est importante.

Morgan Tocker
la source
5
+1 pour avoir mentionné l'éléphant dans la pièce: conflit de mutex
mardi