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

28

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 n'utilise que 250 Mo de RAM, gardant les disques très occupés, même si j'ai beaucoup de RAM libre.

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?

holiveira
la source

Réponses:

20

table_cacheest 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 regardez la variable open_tables. Si c'est la même chose que votre table_cachevaleur et opened_tablescontinue d'augmenter, vous devez augmenter la table_cachevaleur dans votre fichier de configuration. Vous trouverez un équilibre en expérimentant ces variables pendant les périodes de pointe. Vous voulez le configurer de telle sorte qu'aux heures de pointe, il y ait une faible quantité opened_tablesmême après que le serveur a été en fonction pendant une longue période.

key_buffer_sizeest é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 à nouveau regarder les variables avec la show variables;commande et comparer key_read_requestsà key_reads. Idéalement, vous voulez que le rapport entre ces deux variables soit aussi bas que possible, et vous pouvez le faire en augmentant la taille de la key_buffer_size. Si vous définissez cette variable sur une valeur plus élevée, vous aurez moins d'écritures et de lectures directement vers et depuis le disque, ce qui était votre principale préoccupation.

James
la source
11
En fait, la commande consiste show status; à voir les variables d'état telles que Open_tableset Opened_tables. table_cachesemble avoir été supprimé dans les versions récentes de MySQL.
Matt Fenwick
5

Vous devez modifier les valeurs dans le my.cnffichier et redémarrer MySQL, bien que vous puissiez également en changer plusieurs pendant que MySQL est en cours d'exécution ('SET GLOBAL VARIABLE = value ').

Vous voudrez probablement regarder de plus en plus key_buffer_size, sort_buffer, read_bufferet table_cachepour 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 semblent 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.

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

staticsan
la source