Le backend de la base de données affecte l'application, ce qui peut ensuite avoir un impact sur les performances de l'organisation. Lorsque cela se produit, les responsables ont tendance à vouloir une solution rapide. Il existe de nombreuses voies différentes pour améliorer les performances de MySQL. En tant que choix très populaire pour de nombreuses organisations, il est assez courant de trouver une installation MySQL avec la configuration par défaut. Cependant, cela peut ne pas être adapté à votre charge de travail et à vos besoins de configuration.
Dans ce blog, nous vous aiderons à mieux comprendre la charge de travail de votre base de données et les éléments qui peuvent lui nuire. La connaissance de l'utilisation de ressources limitées est essentielle pour quiconque gère la base de données, en particulier si vous exécutez votre système de production sur une base de données MySQL.
Pour nous assurer que la base de données fonctionne comme prévu, nous commencerons par les outils de surveillance MySQL gratuits. Nous examinerons ensuite les paramètres MySQL associés que vous pouvez modifier pour améliorer l'instance de base de données. Nous examinerons également l'indexation en tant que facteur de gestion des performances de la base de données.
Pour être en mesure d'optimiser l'utilisation des ressources matérielles, nous examinerons l'optimisation du noyau et d'autres paramètres cruciaux du système d'exploitation. Enfin, nous examinerons les configurations à la mode basées sur la réplication MySQL et comment elles peuvent être examinées en termes de retard de performances.
Identifier les problèmes de performances de MySQL
Cette analyse vous aide à mieux comprendre la santé et les performances de votre base de données. Les outils répertoriés ci-dessous peuvent vous aider à capturer et à comprendre chaque transaction, vous permettant de rester au top de ses performances et de sa consommation de ressources.
PMM (surveillance et gestion Percona)
L'outil de surveillance et de gestion Percona est une collection d'outils open source dédiés aux bases de données MySQL, MongoDB et MariaDB (sur site ou dans le cloud). L'utilisation de PPM est gratuite et basée sur les séries chronologiques DB bien connues de Grafana et Prometheus. Il fournit une analyse temporelle approfondie pour MySQL. Il propose des tableaux de bord préconfigurés qui aident à comprendre la charge de travail de votre base de données.
PMM utilise un modèle client/serveur. Vous devrez télécharger et installer à la fois le client et le serveur. Pour le serveur, vous pouvez utiliser Docker Container. C'est aussi simple que d'extraire l'image du menu fixe du serveur PMM, de créer un conteneur et de lancer PMM.
Extraire l'image du serveur PMM
docker pull percona/pmm-server:2
2: Pulling from percona/pmm-server
ab5ef0e58194: Downloading 2.141MB/75.78MB
cbbdeab9a179: Downloading 2.668MB/400.5MB
Créer un conteneur PMM
docker create \
-v /srv \
--name pmm-data \
percona/pmm-server:2 /bin/true
Exécuter le conteneur
docker run -d \
-p 80:80 \
-p 443:443 \
--volumes-from pmm-data \
--name pmm-server \
--restart always \
percona/pmm-server:2
Vous pouvez également vérifier à quoi il ressemble sans installation. Une démo de PMM est disponible ici.
Un autre outil faisant partie de l'ensemble d'outils PMM est Query Analytics (QAN). L'outil QAN reste au top du temps d'exécution des requêtes. Vous pouvez même obtenir des détails sur les requêtes SQL. Il donne également une vue historique des différents paramètres critiques pour les performances optimales d'un serveur de base de données MySQL. Cela aide souvent à comprendre si des modifications du code pourraient nuire à vos performances. Par exemple, un nouveau code a été introduit à votre insu. Une utilisation simple serait d'afficher les requêtes SQL en cours et de mettre en évidence les problèmes pour vous aider à améliorer les performances de votre base de données.
PMM offre une visibilité ponctuelle et historique des performances de la base de données MySQL. Les tableaux de bord peuvent être personnalisés pour répondre à vos besoins spécifiques. Vous pouvez même développer un panneau particulier pour trouver les informations que vous souhaitez sur un événement passé.
Surveillance gratuite de la base de données avec ClusterControl
ClusterControl fournit une surveillance en temps réel de l'ensemble de l'infrastructure de la base de données. Il prend en charge divers systèmes de base de données à commencer par MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (à la fois Percona et MariaDB), MongoDB, PostgreSQL et TimescaleDB. Les modules de surveillance et de déploiement sont gratuits.
ClusterControl se compose de plusieurs modules. Dans l'édition gratuite ClusterControl Community, nous pouvons utiliser :
Les conseillers en performance offrent des conseils spécifiques sur la façon de résoudre les problèmes de base de données et de serveur, tels que que les performances, la sécurité, la gestion des journaux, la configuration et la planification des capacités. Les rapports opérationnels peuvent être utilisés pour garantir la conformité sur des centaines d'instances. Cependant, la surveillance n'est pas la gestion. ClusterControl propose des fonctionnalités telles que la gestion des sauvegardes, la récupération/le basculement automatisés, le déploiement/la mise à l'échelle, les mises à niveau progressives, la sécurité/le chiffrement, la gestion de l'équilibreur de charge, etc.
Suivi &Conseillers
ClusterControl Community Edition offre une surveillance de base de données gratuite qui fournit une vue unifiée de tous vos déploiements dans les centres de données et vous permet d'explorer les nœuds individuels. Semblable à PMM, nous pouvons trouver des tableaux de bord basés sur des données en temps réel. Il s'agit de savoir ce qui se passe maintenant, avec des métriques haute résolution pour une meilleure précision, des tableaux de bord préconfigurés et une large gamme de services de notification tiers pour les alertes.
Les systèmes sur site et dans le cloud peuvent être surveillés et gérés à partir d'un seul point . Des vérifications de l'état intelligentes sont mises en œuvre pour les topologies distribuées, par exemple, la détection du partitionnement du réseau en tirant parti de la vue de l'équilibreur de charge sur les nœuds de la base de données.
ClusterControl Workload Analytics dans l'un des composants de surveillance qui peut facilement vous aider à suivre vos activités de base de données. Il fournit de la clarté dans les transactions/requêtes des applications. Les exceptions de performances ne sont jamais attendues, mais elles se produisent et sont faciles à manquer dans une mer de données. La découverte des valeurs aberrantes obtiendra toutes les requêtes qui commencent soudainement à s'exécuter beaucoup plus lentement que d'habitude. Il suit la moyenne mobile et l'écart type pour les temps d'exécution des requêtes et détecte/alerte lorsque la différence entre la valeur dépasse la moyenne de deux écarts types.
Comme nous pouvons le voir sur l'image ci-dessous, nous avons pu détecter certaines requêtes qui, entre une journée, ont tendance à modifier le temps d'exécution à une heure précise.
Pour installer ClusterControl, cliquez ici et téléchargez le script d'installation. Le script d'installation prendra en charge les étapes d'installation nécessaires.
Vous devriez également consulter la démo ClusterControl pour la voir en action.
Vous pouvez également obtenir une image Docker avec ClusterControl.
$ docker pull severalnines/clustercontrol
Pour plus d'informations à ce sujet, suivez cet article.
Indexation de la base de données MySQL
Sans index, l'exécution de la même requête entraîne une analyse de chaque ligne à la recherche des données nécessaires. La création d'un index sur un champ dans une table crée une structure de données supplémentaire, qui est la valeur du champ, et un pointeur vers l'enregistrement auquel il se rapporte. En d'autres termes, l'indexation produit un raccourci, avec des temps de requête beaucoup plus rapides sur des tables volumineuses. Sans index, MySQL doit commencer par la première ligne, puis parcourir toute la table pour trouver les lignes pertinentes.
Généralement, l'indexation fonctionne mieux sur les colonnes qui font l'objet des clauses WHERE dans vos requêtes courantes.
Les tables peuvent avoir plusieurs index. La gestion des index nécessitera inévitablement de pouvoir lister les index existants sur une table. La syntaxe pour afficher un index est ci-dessous.
Pour vérifier les index sur la table MySQL, exécutez :
SHOW INDEX FROM table_name;
Étant donné que les index ne sont utilisés que pour accélérer la recherche d'un champ correspondant dans les enregistrements, il va de soi que l'indexation des champs utilisés uniquement pour la sortie serait simplement une perte d'espace disque. Un autre effet secondaire est que les index peuvent étendre les opérations d'insertion ou de suppression, et doivent donc être évités lorsqu'ils ne sont pas nécessaires.
Inversion de la base de données MySQL
Sur les serveurs où MySQL est le seul service en cours d'exécution, il est recommandé de définir vm.swapiness =1. Le paramètre par défaut est défini sur 60, ce qui n'est pas approprié pour un système de base de données.
vi /etc/sysctl.conf
vm.swappiness = 1
Énormes pages transparentes
Si vous exécutez votre MySQL sur RedHat, assurez-vous que Transparent Huge Pages est désactivé.
Cela peut être vérifié par la commande :
cat /proc/sys/vm/nr_hugepages
0
(0 signifie que les grandes pages transparentes sont désactivées.)
Planificateur d'E/S MySQL
Dans la plupart des distributions, les planificateurs d'E/S noop ou d'échéance doivent être activés par défaut. Pour le vérifier, exécutez
cat /sys/block/sdb/queue/scheduler
Options du système de fichiers MySQL
Il est recommandé d'utiliser des systèmes de fichiers journalisés comme xfs, ext4 ou btrfs. MySQL fonctionne bien avec tout cela et les différences viendront plus probablement avec la taille de fichier maximale prise en charge.
- XFS (taille maximale du système de fichiers 8 Eb, taille maximale du fichier 8 Eb)
- XT4 (taille maximale du système de fichiers 8 Eb, taille maximale des fichiers 16 To)
- BTRFS (taille maximale du système de fichiers 16 EB, taille maximale du fichier 16 EB)
Les paramètres par défaut du système de fichiers devraient s'appliquer correctement.
Démon NTP
C'est une bonne pratique d'installer le démon de serveur de temps NTP sur les serveurs de base de données. Utilisez l'une des commandes système suivantes.
#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp
Conclusion
C'est tout pour la première partie. Dans le prochain article, nous continuerons avec les paramètres des systèmes d'exploitation des variables MySQL et les requêtes utiles pour recueillir l'état des performances de la base de données.