Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment optimiser les performances de MySQL à l'aide de MySQLTuner

L'exécution de MySQL avec des paramètres optimaux pour des ressources spécifiques permet de gérer des charges de serveur plus importantes et d'éviter le ralentissement du serveur. Généralement, après avoir réglé Apache pour gérer des charges plus importantes, il est avantageux de régler MySQL sur des connexions supplémentaires.

Le réglage de la base de données est un sujet vaste et ce guide ne couvre que les bases de la modification de votre configuration MySQL. Les grandes bases de données MySQL peuvent nécessiter une quantité considérable de mémoire. Pour cette raison, nous vous recommandons d'utiliser un High Memory Linode pour de telles configurations.

Remarque Les étapes de ce guide nécessitent des privilèges root. Assurez-vous d'exécuter les étapes ci-dessous en tant que root ou avec le sudo préfixe. Pour plus d'informations sur les privilèges, consultez notre guide Utilisateurs et groupes.

Outils pouvant aider à optimiser MySQL

Afin de déterminer si votre base de données MySQL doit être reconfigurée, il est préférable d'examiner les performances actuelles de vos ressources. Cela peut être fait avec la commande top ou avec le service LinodeLongview. À tout le moins, vous devriez vous familiariser avec l'utilisation de la RAM et du processeur de votre serveur, qui peut être découverte avec ces commandes :

echo [PID]  [MEM]  [PATH] &&  ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20

MySQLTuner

Le script MySQLTuner évalue votre installation MySQL, puis émet des suggestions pour augmenter les performances et la stabilité de votre serveur.

  1. Téléchargez le script MySQLTuner :

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Modifiez les autorisations des scripts pour qu'ils soient exécutables :

     chmod +x mysqltuner.pl
    
  3. Exécutez le mysqltuner.pl scénario. Vous serez invité à saisir votre identifiant et votre mot de passe d'administration MySQL :

     ./mysqltuner.pl
    
  4. Le script renverra des résultats similaires à la sortie ci-dessous :

    >>  MySQLTuner 1.4.0 - Major Hayden <[email protected]>
             >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
             >>  Run with '--help' for additional options and output filtering
            Please enter your MySQL administrative login: root
            Please enter your MySQL administrative password:
            [OK] Currently running supported MySQL version 5.5.41-0+wheezy1
            [OK] Operating on 64-bit architecture
    
            -------- Storage Engine Statistics -------------------------------------------
            [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
            [--] Data in InnoDB tables: 1M (Tables: 11)
            [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
            [!!] Total fragmented tables: 11
    
            -------- Security Recommendations  -------------------------------------------
            [OK] All database users have passwords assigned
    
            -------- Performance Metrics -------------------------------------------------
            [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K)
            [--] Reads / Writes: 100% / 0%
            [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads)
            [OK] Maximum possible memory usage: 597.8M (60% of installed RAM)
            [OK] Slow queries: 0% (0/113)
            [OK] Highest usage of available connections: 0% (1/151)
            [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K
            [!!] Query cache efficiency: 0.0% (0 cached / 71 selects)
            [OK] Query cache prunes per day: 0
            [OK] Temporary tables created on disk: 25% (54 on disk / 213 total)
            [OK] Thread cache hit rate: 97% (1 created / 42 connections)
            [OK] Table cache hit rate: 24% (52 open / 215 opened)
            [OK] Open file limit used: 4% (48/1K)
            [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks)
            [OK] InnoDB buffer pool / data size: 128.0M/1.2M
            [OK] InnoDB log waits: 0
            -------- Recommendations -----------------------------------------------------
            General recommendations:
                Run OPTIMIZE TABLE to defragment tables for better performance
                Enable the slow query log to troubleshoot bad queries
            Variables to adjust:
                query_cache_limit (> 1M, or use smaller result sets)
    MySQLTuner propose des suggestions sur la façon d'améliorer les performances de la base de données. Si vous hésitez à mettre à jour votre base de données par vous-même, suivre les suggestions de MySQLTuner est l'un des moyens les plus sûrs d'améliorer les performances de votre base de données.

Régler MySQL

Lorsque vous modifiez la configuration de MySQL, soyez attentif aux changements et à la manière dont ils affectent votre base de données. Même en suivant les instructions de programmes tels que MySQLTuner, il est préférable d'avoir une certaine compréhension du processus.

Le fichier de configuration MySQL stocké à l'emplacement suivant :/etc/mysql/my.cnf .

Remarque

Avant de mettre à jour votre configuration MySQL, créez une sauvegarde de my.cnf fichier :

cp /etc/mysql/my.cnf ~/my.cnf.backup

La meilleure pratique suggère que vous apportiez de petites modifications, une à la fois, puis que vous surveilliez le serveur après chaque modification. Vous devez redémarrer MySQL après chaque modification :

Pour les distributions utilisant systemd :

systemctl restart mysqld

Pour les distributions avec différents systèmes d'initialisation :

service mysql restart

Lors de la modification des valeurs dans le my.cnf fichier, assurez-vous que la ligne que vous modifiez n'a pas été commentée avec le dièse (# ) préfixe.

key_buffer

Changer le key_buffer alloue plus de mémoire à MySQL, ce qui peut considérablement accélérer vos bases de données, en supposant que vous avez de la mémoire libre. Le key_buffer La taille ne doit généralement pas occuper plus de 25 % de la mémoire système lors de l'utilisation du moteur de table MyISAM, et jusqu'à 70 % pour InnoDB. Si la valeur est trop élevée, les ressources sont gaspillées.

Selon la documentation de MySQL, pour les serveurs avec 256 Mo (ou plus) de RAM avec de nombreuses tables, un paramètre de 64 Mo est recommandé. Les serveurs avec 128 Mo de RAM et moins de tables peuvent être définis sur 16 Mo, la valeur par défaut. Les sites Web avec encore moins de ressources et de tableaux peuvent avoir cette valeur inférieure.

max_allowed_packet

Ce paramètre vous permet de définir la taille maximale d'un paquet pouvant être envoyé. Un paquet est un état SQL unique, une ligne unique envoyée à un client ou un journal envoyé d'une base de données source à une réplique. Si vous savez que votre serveur MySQL va traiter de gros paquets, il est préférable d'augmenter cela à la taille de votre plus gros paquet. Si cette valeur était trop petite, vous recevriez une erreur dans votre journal des erreurs.

thread_stack

Cette valeur contient la taille de la pile pour chaque thread. MySQL considère la valeur par défaut du thread_stack variable suffisante pour une utilisation normale; cependant, si une erreur relative au thread_stack être connecté, cela peut être augmenté.

thread_cache_size

Si thread_cache_size est "désactivé" (réglé sur 0), alors toute nouvelle connexion établie nécessite un nouveau thread créé pour elle. Lorsque les connexions se désengagent, le filetage est détruit. Sinon, cette valeur définit le nombre de threads inutilisés à stocker dans un cache jusqu'à ce qu'ils soient utilisés pour une connexion. Généralement, ce paramètre a peu d'incidence sur les performances, sauf si vous recevez des centaines de connexions par minute, auquel cas cette valeur doit être augmentée afin que la majorité des connexions puissent être établies sur des threads mis en cache.

max_connections

Ce paramètre définit le nombre maximum de simultanés Connexions. Il est préférable de prendre en compte le nombre maximum de connexions que vous avez eues dans le passé avant de définir ce nombre, vous aurez donc un tampon entre ce nombre supérieur et les max_connections valeur. Notez que cela n'indique pas le nombre maximum d'utilisateurs sur votre site Web en même temps; il montre plutôt le nombre maximum d'utilisateurs faisant des requêtes simultanément.

table_cache

Cette valeur doit être supérieure à votre open_tables valeur. Pour déterminer cette valeur, utilisez :

1
SHOW STATUS LIKE 'open%';

Plus d'informations

Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.

  • Bibliothèque de documentation MySQL
  • Paramètres du serveur de réglage MySQL
  • MySQLTuner