2 février 2025

Améliorez les performances de MySQL et MariaDB avec des allocateurs de mémoire comme Jemalloc et TCMalloc

Découvrez comment améliorer les performances de MySQL et MariaDB en optimisant l'allocation de mémoire avec Jemalloc et TCMalloc, en réduisant la latence et la fragmentation pour maximiser l'efficacité.

Jemalloc-TCMalloc-MySQL-MariaDB-Performance-Malloc

Introduction

Lors de la gestion de bases de données hautes performances telles que MySQL et MariaDB, l'allocation de mémoire joue un rôle essentiel dans l'efficacité des opérations de lecture et d'écriture. Les allocateurs de mémoire standard, tels que malloc de glibc, peuvent avoir des limitations dans les scénarios de charge élevée. Des alternatives telles que Jemalloc e TCMalloc offrent des améliorations significatives dans la gestion de la mémoire, réduisant la fragmentation et améliorant l'efficacité globale de la base de données.

Dans cet article, nous examinerons les avantages de Jemalloc et TCMalloc par rapport au malloc standard, comment les intégrer dans MySQL et MariaDB et comment surveiller leurs performances.

Pourquoi remplacer malloc par glibc ?

L'allocateur de mémoire fourni par défaut par la bibliothèque GNU C (malloc) est conçu pour répondre à une large gamme d'applications, mais n'est pas optimisé pour les environnements hautes performances tels que les bases de données relationnelles, où une gestion efficace de la mémoire est essentielle. Lorsque MySQL ou MariaDB fonctionnent avec de grandes quantités de données et des requêtes simultanées, malloc peut devenir un goulot d’étranglement, impactant négativement les performances globales du système.

Voici quelques-uns des principaux problèmes qui peuvent survenir avec l'utilisation de malloc dans les scénarios de bases de données à charge élevée :

1. Fragmentation de la mémoire

L’un des principaux problèmes de malloc Il s’agit d’une fragmentation de la mémoire, qui se produit lorsque la mémoire est allouée et libérée de manière inégale. Au fil du temps, cela peut entraîner une augmentation de l’espace inutilisé, réduisant l’efficacité de la mémoire et provoquant une consommation excessive de RAM. Dans les environnements à forte charge de travail, tels que les bases de données, cette fragmentation peut entraîner une augmentation des coûts d’exploitation et une diminution de la stabilité du système.

2. Évolutivité limitée dans les systèmes multithread

Les installations MySQL et MariaDB modernes utilisent une architecture hautement simultanée, avec plusieurs threads accédant simultanément à la mémoire. malloc glibc utilise un système de verrouillage global qui peut limiter l'efficacité de la base de données s'il existe de nombreuses connexions simultanées. Cela peut provoquer un effet secondaire contention, où les threads se disputent l'accès aux ressources mémoire, ce qui ralentit le temps de réponse des requêtes et réduit le débit global.

3. Des performances imprévisibles au fil du temps

parce que malloc Il n'est pas spécifiquement conçu pour des charges de travail constantes et intensives, son efficacité peut se dégrader avec le temps. En raison d’une gestion inefficace des allocations et des désallocations, des problèmes tels que ballonnement de la mémoire, ou l’accumulation de mémoire inutilisée qui n’est pas immédiatement restituée au système d’exploitation. Cela peut conduire à une dégradation progressive des performances de la base de données, avec des latences plus élevées dans les opérations de lecture et d'écriture.

4. Libération de mémoire inefficace

Une autre limitation de malloc c'est qu'il ne restitue pas toujours la mémoire inutilisée au système d'exploitation en temps voulu. Dans les bases de données très intensives, cela peut conduire à une accumulation excessive de mémoire résidente (RSS), augmentant le risque d'échange et dégradant les performances globales du serveur.

Jemalloc

Qu'est-ce que Jemalloc ?

Jemalloc est un allocateur de mémoire développé à l'origine par Jason Evans pour FreeBSD et utilisé dans de nombreuses applications hautes performances telles que Redis et Facebook.

Avantages de Jemalloc :

  • Moins de fragmentation de la mémoire
  • Meilleure gestion de la mémoire dans les charges de travail multithread
  • Une plus grande efficacité dans l'allocation et la désallocation
  • Capacités de débogage avancées avec outils de profilage

Installation de Jemalloc

Sur les distributions basées sur SoulLinux e RHEL, vous pouvez installer Jemalloc avec :

sudo dnf install jemalloc -y

Sur Debian/Ubuntu :

sudo apt install libjemalloc-dev -y

Configuration de MySQL/MariaDB avec Jemalloc

Pour que MySQL ou MariaDB utilise Jemalloc, vous pouvez démarrer le serveur avec la bibliothèque préchargée. Par exemple:

LD_PRELOAD=/usr/lib64/libjemalloc.so.2 mysqld

Pour rendre la configuration permanente, modifiez le fichier de service systemd :

sudo systemctl edit mariadb

Ajoutez les lignes suivantes :

[Service]Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.2"

Rechargez ensuite le service :

sudo systemctl daemon-reexec

 

sudo systemctl restart mariadb

TCMalloc

Qu'est-ce que TCMalloc ?

TCMalloc (Thread-Caching Malloc) est un autre allocateur optimisé, développé par Google, et est particulièrement utile pour réduire la latence dans les charges de travail multithread.

Avantages de TCMalloc :

  • Gestion avancée de la mise en cache de la mémoire pour chaque thread
  • Latence réduite dans les opérations d'allocation et de désallocation
  • Hautes performances dans des scénarios de charge élevée

Installation de TCMalloc

Pour installer TCMalloc sur AlmaLinux/RHEL :

sudo dnf install gperftools-libs -y

Sur Debian/Ubuntu :

sudo apt install libtcmalloc-minimal4 -y

Configuration de MySQL/MariaDB avec TCMalloc

Pour précharger TCMalloc au démarrage de MySQL ou MariaDB, utilisez :

LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4 mysqld

Pour rendre la configuration permanente :

sudo systemctl edit mariadb

Ajouter:

[Service]
Environment="LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4"

Redémarrez ensuite le service :

sudo systemctl daemon-reexec

 

sudo systemctl restart mariadb

Comparaison entre Jemalloc et TCMalloc

caratteristica Jemalloc TCMalloc
Efficacité multithread Élevée Très haut
Fragmentation de la mémoire Bassa Médias
Vitesse d'allocation Excellent Excellent
Consommation de mémoire Légèrement plus haut Plus bas
Débogage avancé Oui Non

Si votre base de données présente des problèmes de fragmentation de la mémoire, Jemalloc C'est le meilleur choix. Si vous avez besoin de réduire la latence dans les charges de travail multithread, TCMalloc peut offrir des avantages supérieurs.

Benchmark JeMalloc TCMalloc Transactions par seconde TPS

Les tests de référence ont montré des différences de performances significatives entre Jemalloc, TCMalloc et l'allocateur standard glibc malloc dans différents scénarios de charge et configurations matérielles.

malloc_test2_oltp_ro1

  • 4 vCPU:Avec un nombre limité de cœurs, les performances étaient presque identiques pour tous les allocateurs, avec un débit moyen d'environ 2500 TPS (transactions par seconde).
  • 8 vCPU:Le débit de Jemalloc e TCMalloc a doublé, atteignant 5000 TPS, alors qu'avec glibc malloc une diminution significative a été observée dans 3500 TPS lorsque le nombre de fils a atteint 64-128.
  • 16 vCPU: Jemalloc e TCMalloc ont maintenu une augmentation stable du débit jusqu'à 6300 TPS jusqu'à 4096 threads. Au contraire, avec glibc malloc, le débit a chuté de façon spectaculaire après la fil 16, se stabilisant autour de la 4000 TPS.
  • 32 vCPU: Jemalloc e TCMalloc ont montré une amélioration significative, atteignant un pic de 12500 TPS et maintenir des performances élevées jusqu'à fil 1024, avec une légère diminution au-dessus de ce seuil. Glybc malloc, au lieu de cela, a montré une baisse drastique des performances, avec un TPS tombant en dessous des niveaux enregistrés dans les tests à 8 et 16 vCPU, s'installant autour 3100 TPS.

En bref, dans les tests OLTP_RO (Traitement des transactions en ligne en lecture seule) sur un serveur avec 32 vCPU, la différence de performance entre glibc malloc e Jemalloc/TCMalloc Il s'est avéré que c'était environ 4 fois plus haut en faveur des allocateurs avancés. Cela montre comment, avec un nombre croissant de cœurs et de threads concurrents, Jemalloc et TCMalloc garantissent des performances plus stables et évolutives, réduisant considérablement les goulots d'étranglement causés par une allocation de mémoire inefficace avec glibc malloc.

pensées finales

  • Si le serveur a 8 cœurs ou moins, aucune différence significative n'est observée entre glibc malloc et des répartiteurs alternatifs.
  • Si le serveur a plus de 8 cœurs, il est conseillé d'essayer de comparer avec Jemalloc ou TCMalloc, car ils peuvent améliorer considérablement les performances de MySQL sans frais supplémentaires.
  • Si vous exécutez des tests d'évaluation sur des serveurs multicœurs, il est essentiel d'activer un allocateur de mémoire alternatif, sinon les performances seront limitées par glibc malloc plutôt que le moteur MySQL lui-même.

Conclusions

En utilisant un allocateur de mémoire optimisé comme Jemalloc o TCMalloc peut améliorer considérablement les performances de MySQL et MariaDB dans les environnements de production, en particulier sous de lourdes charges de travail. Jemalloc se distingue par sa capacité à réduire la fragmentation de la mémoire, assurant une gestion plus efficace et offrant des outils de débogage avancés. D'autre part, TCMalloc Il est conçu pour réduire la latence des opérations d'allocation et de désallocation, améliorant ainsi les performances dans les systèmes hautement parallèles et multithreads.

Les tests montrent que l’adoption de l’un de ces allocateurs peut réduire la consommation de RAM, améliorer le débit des requêtes et garantir une plus grande stabilité opérationnelle au fil du temps. Cependant, le choix de l'allocateur idéal dépend du type de charge de travail de la base de données : Jemalloc C'est souvent le meilleur choix pour les environnements où la gestion de la mémoire doit être plus prévisible et optimisée, tandis que TCMalloc Il est préférable dans les contextes où la réduction de la latence et la vitesse d'allocation sont des priorités.

Si votre objectif est de maximiser l'efficacité de la mémoire et d'améliorer l'évolutivité de la base de données, envisagez de migrer vers Jemalloc o TCMalloc. Après la mise en œuvre, surveillez attentivement les performances de la base de données avec des outils d’analyse comparative et de mémoire pour garantir un bénéfice maximal et adapter la configuration aux besoins spécifiques de votre infrastructure.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de The FreeBSD Foundation ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt. Oracle Corporation détient les droits sur Oracle®, MySQL® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; REDIS® est une marque déposée de Redis Labs Ltd. F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB. Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited. Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV. Hetzner Online GmbH détient les droits sur Hetzner® ; OVHcloud est une marque déposée d'OVH Groupe SAS ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Facebook, Inc. détient les droits sur Facebook®. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente en aucune manière aucune de ces entités. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italie.

Retour en haut de page