web-dev-qa-db-fra.com

Multi-cœurs et performances MySQL

L'importance de RAM est un fait établi mais beaucoup moins de matériel est disponible sur l'importance des cœurs et du multithreading quand il s'agit de l'utilisation du CPU par MySQL. Je parle de la différence de l'exécution de MySQL sur 4 points contre 6 points contre 8 points et ainsi de suite.

Les différents moteurs de stockage utilisent-ils le CPU différemment?

38
Rick James

En ce qui concerne MySQL, il n'y a pas de comparaison entre les moteurs de stockage, sauf qu'il appartient à deux catégories de base:

MySQL propose l'utilisation de plusieurs moteurs de stockage

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

  • Les autres moteurs de stockage ne bénéficient tout simplement pas de la présence de plus de cœurs, autres que 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 dicte essentiellement 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, Plugin InnoDB) et XtraDB de Percona Server ont des options que vous pouvez définir afin d'accéder à plusieurs cœurs (Percona Server le fait depuis plus longtemps). En fait, Percona injecte environ 30 000 lignes de code spécifiquement pour l'amélioration des performances d'InnoDB avec chaque nouvelle version GA du code source MySQL. Nous pouvons être sûrs qu'Oracle a inclus ses propres améliorations à partir de son propre groupe de réflexion à exécuter dans InnoDB pour un fonctionnement multicœur (depuis MySQL 5.1.38).

Avec la nécessité d'effectuer MVCC sur les données conjointement avec le verrouillage de ligne/page, les performances de transaction peuvent désormais être instrumentées, mesurées et configurées.

S'il y a une chose que j'ai apprise sur l'utilisation de plusieurs cœurs, c'est que vous devez régler InnoDB efficacement et ne pas simplement compter sur InnoDB hors de la boîte .

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

En ce qui concerne InnoDB bénéficiant de tous les cœurs, nous devons garder les choses en perspective. Les cœurs doivent également s'occuper d'autres questions (OS, disque, mémoire, applications, surveillance, etc.) dans le serveur de bases 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 à partir de Munin, la prise en charge des applications pour JBoss, PHP, et la liste continue. Si vous voulez que MySQL, plus précisément InnoDB, utilise plus de cœurs, le serveur de base de données doit être dédié exclusivement à MySQL et l'OS/disque/mémoire doit tendre à MySQL uniquement . Dans cette perspective, InnoDB engagera plus de cœurs sans aucun doute.

Quant au plugin InnoDB, il a été mentionné simplement pour montrer les initiatives antérieures pour avoir un meilleur InnoDB de la part de MySQL (eh, Oracle. Désolé, ne déroule toujours pas encore). De nouvelles variables pour invoquer plus d'activité principale sont devenues évidentes à partir de MySQL 5.1.38.

Par exemple, innodb_read_io_threads et innodb_write_io_threads (tous 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 le maximum est 64. Les paramètres par défaut et max étant si différents (4 - 64) montrent que InnoDB est aussi multithread et intensif que vous le configurez !!!

Percona a dirigé les besoins de la communauté MySQL pour accéder à plus de cœurs avec InnoDB. Par conséquent, MySQL a commencé à emboîter le pas. Je dois admettre qu'Oracle (beurk) a apporté les améliorations nécessaires pour plus d'activités de base.

30
RolandoMySQLDBA

Je trouve que parler de moteurs de stockage en utilisant les cœurs peuvent être trompeurs 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 du processeur est que le code de verrouillage interne ( mutexes ) 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 chauds dans MyISAM.

Si nous ignorons les conflits mutex pendant une seconde et revenons à votre question principale: combien est-il important d'avoir plusieurs cœurs? -

J'aime avoir beaucoup de cœurs pour les charges de travail qui répondent aux demandes des utilisateurs. En avoir plusieurs peut réduire l'écart entre les temps de requête. Pensez à cela comme si vous étiez au super marché avec 12 allées ouvertes contre seulement 2.

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

9
Morgan Tocker