web-dev-qa-db-fra.com

Comment augmenter l'utilisation de la mémoire dans MySQL Server pour améliorer la vitesse?

J'ai un serveur Windows 2008 avec 8 Go de RAM exécutant IIS7 et MySQL. J'ai suivi la mémoire, le processeur et l'utilisation du disque sur le serveur et j'ai découvert que MySQL utilise seulement 250 Mo de RAM, gardant les disques très occupés, même si j'ai beaucoup de RAM libre autour.

Dans SQL Server, je peux facilement définir la quantité de mémoire que je veux utiliser, je recherche le même paramètre dans MySQL.

Comment puis-je configurer MySQL pour utiliser plus de mémoire et réduire l'utilisation du processeur et du disque?

30
holiveira

table_cache est la directive de configuration la plus utile à modifier. Chaque fois que MySQL accède à une table, il charge la table dans le cache. Si vous avez un grand nombre de tables, il est plus rapide de les mettre en cache.

Jetez un œil à vos variables de serveur en exécutant:

show status;

et jetez un œil à la variable open_tables. S'il s'agit du même que votre table_cache valeur et opened_tables continue d'augmenter, vous devez augmenter la table_cache valeur dans votre fichier de configuration. Vous trouverez un équilibre en expérimentant ces variables pendant les périodes de pointe. Vous souhaitez le configurer de sorte que, aux heures de pointe, il y ait une faible quantité de opened_tables même après une longue période de fonctionnement du serveur.

key_buffer_size est également une bonne variable à expérimenter. Cette variable affecte la taille du tampon d'index, et l'agrandir augmente la vitesse de traitement des index de MySQL. Vous pouvez regarder les variables avec le show variables; encore une fois, et comparez key_read_requests à key_reads. Idéalement, vous souhaitez que le rapport entre ces deux variables soit aussi bas que possible, et vous pouvez le faire en augmentant la taille de key_buffer_size. Si vous définissez cette variable plus haut, vous aurez moins d'écritures et de lectures directement vers et depuis le disque, ce qui était votre principale préoccupation.

20
James

Vous devez modifier les valeurs dans my.cnf fichier et redémarrez MySQL, même si vous pouvez en changer plusieurs pendant que MySQL est en cours d'exécution ('SET GLOBAL VARIABLE = value ').

Vous voudrez probablement envisager d'augmenter key_buffer_size, sort_buffer, read_buffer et table_cache pour commencer et probablement innodb_buffer_pool_size, si vous avez des tables InnoDB. Certaines de ces valeurs vous permettent d'augmenter considérablement (même deux ordres de grandeur), surtout compte tenu de votre matériel. Les valeurs par défaut de MySQL sont extrêmement conservatrices et semblaient viser les postes de travail à usage mixte courants il y a une dizaine d'années. Oh, et sachez que la version 32 bits aura du mal à utiliser plus de 2 Go de RAM.

Regardez dans le manuel MySQL pour plus d'informations et de conseils.

6
staticsan