Vous pouvez accéder aux tailles par défaut des buffers de mysqld
avec la commande suivante :
shell> mysqld --help
Cette commande produit la liste de toutes les options et les variables de
mysqld. La réponse fournit aussi les valeurs par défaut, et devrait
ressembler à ceci :
Possible variables for option --set-variable (-O) are:
back_log current value: 5
connect_timeout current value: 5
delayed_insert_timeout current value: 300
delayed_insert_limit current value: 100
delayed_queue_size current value: 1000
flush_time current value: 0
join_buffer_size current value: 131072
key_buffer_size current value: 1048540
long_query_time current value: 10
max_allowed_packet current value: 1048576
max_connections current value: 100
max_connect_errors current value: 10
max_delayed_threads current value: 20
max_heap_table_size current value: 16777216
max_join_size current value: 4294967295
max_sort_length current value: 1024
max_tmp_tables current value: 32
net_buffer_length current value: 16384
record_buffer current value: 131072
sort_buffer current value: 2097116
table_cache current value: 64
tmp_table_size current value: 1048576
thread_stack current value: 131072
wait_timeout current value: 28800
Si vous avez un serveur mysqld en fonctionnement, vous pouvez
voir les valeurs réellement utilisées en exécutant la commande suivante :
shell> mysqladmin variables
Toutes les options dont détaillées ci-dessous. Les tailles des buffers et des
piles, les longueurs sont toutes données en octets. Vous pouvez ajouter le
suffixe ``K'' ou ``M'' pour indiquer kilo-octets or
mégaoctets. Par exemple, 16M représente 16 mégaoctets. La casse du
suffixe n'a pas d'importance, et; 16M et 16m sont
équivalents.
back_log Le nombre maximum de tentative de connexions simultanées au serveur
MySQL . Cette option entre en jeu lors que le thread principal
MySQL reçoit un très GRAND nombre de connexion
dans un délai très bref. Le thread principal requiert un peu de temps (même si
c'est très peu) pour vérifier la connexion, et lancer un nouveau thread.
L'option back_log indique le nombre de connexion qui sont mise en
attente, avant que MySQL momentanément cesse de réponse à de
nouvelles requêtes. Augmentez la valeur pour accepter un grand nombre de
connexions dans un délais très court. En d'autres termes, cette valeur
correspond à la taille de la file d'attente de connexions TCP/IP. Votre système
d'exploitation a sa propre limite. Sous Unix, le manuel donne plus de détails
avec l'entrée listen(2). Vérifier la documentation de votre OS pour
connaître la valeur de cette variable. Affecter à back_log une
valeur plus grande que le maximum accepté par le système sera inefficace.
connect_timeout Le nombre de secondes d'attente d'un paquet de connexion
avant que mysqld ne réponde une erreur Bad handshake.
delayed_insert_timeout Le temps d'attente d'un thread INSERT
DELAYED : si les commandes INSERT sont trop longues, le
thread INSERT DELAYED se finira.
delayed_insert_limit Après avoir inséré delayed_insert_limit
lignes, le handler INSERT DELAYED vérifiera qu'il n'y a aucune
commande SELECT en attente. Si c'est le cas, le handler
INSERT DELAYED sera exécuté avant de continuer.
delayed_queue_size La taille de la queue d'attente qui gère les INSERT
DELAYED. Si la queue est pleine, tout client qui émet une commande
INSERT DELAYED devra attendre qu'une place se libère dans la queue.
flush_time Si cette option a une valeur, alors, toutes les
flush_time secondes, toutes les tables seront fermées.(pour libérer
des ressources, et synchroniser les tables sur le disque).
join_buffer La taille des buffers utilisés lors des regroupements sans index
(les plus gourmands en place). Le buffer est alloué à chaque regroupement entre
deux tables. Augmentez cette valeur pour obtenir un regroupement plus rapide
lorsque l'ajout d'index n'est pas possible (ce qui est la méthode la plus
efficace pour accélérer une requête).
key_buffer Les blocs d'index sont bufferisés et partagé par tous les
threads. key_buffer est la taille des buffers de bloc d'index. Cela
permettra d'accélerer le traitement des commandes DELETE ou
INSERT sur une table avec de nombreux index. Pour accélerer encore
plus la commande, reportez vous à la section
long_query_time Si une requête requiert plus que time secondes,
le compteur de slow_queries sera incrémentés.
max_allowed_packet La taille maximale d'un paquet. Ce buffer est initialisé
à la longueur net_buffer_length octets, mais il peut croître
jusqu'à une taille de max_allowed_packet octets, au besoin. Cette
valeur par défaut est trop petite pour gérer de gros paquets (et probablement
ceux-ci sont érronnés). Il vaut mieux augmenter la taille cette colonne pour
pouvoir gérer des objets de BLOB : il faudrait que la valeur de
cette option soit aussi grande de le plus grand BLOB que vous
voulez utiliser.
max_connections Le nombre maximal de connexion simutanée de client. En
augmentant cette valeur, vous augmenter le nombre de pointeur de fichier que
requiert mysqld . Voir ci-après pour plus de détails sur les
pointeurs de fichiers
max_connect_errors S'il y a plus que max_connect_errors
connexions interrompues de la part d'un même hote, toutes les tentatives
ultérieures de connexions seront bloquées. Vous pouvez aussi débloquer les hôtes
avec la commande FLUSH HOSTS.
max_delayed_threads Force le serveur à limiter le nombre de handle
INSERT DELAYED à max_delayed_threads. Si vous tentez d'insérez des
informations dans une nouvelle table après que tous les threads INSERT
DELAYED soient utilisés, l'attribut DELAYED sera ignoré.
max_join_size Les regroupements qui vont probablement rassembler plus de
max_join_size lignes retourne une erreur. Affectez une limite si
vos utilisateurs prennent la mauvaise habitude d'exécuter des regroupements de
plusieurs millions de lignes.
max_sort_length Le nombre d'octets à utiliser pour classer les objets de
type BLOB ou TEXT (Seuls lest
max_sort_length premiers octets de chaque valeurs seront utilisés,
le reste sera ignoré).
max_tmp_tables (Cette option n'est pas encore effective). Nombre maximum de
tables temporaires qu'un client peut avoir en même temps.
net_buffer_length Le buffer de communication est redimensionné entre deux
requête. Cette option ne devrait généralement pas être modifiée, mais si vous
avez très peu de mémoire, vous pouvez lui affecter la taille attendue de la
requête, c'est à dire la longueur des commandes envoyées par les clients). Si
une commande est trop grande, le buffer sera automatiquement étendu jusqu'à
max_allowed_packet octets.
record_buffer Chaque thread qui effectue une analyse séquentielle, alloue un
buffer de cette taille pour chaque table scannée. Pour augmenter le nombre de
recherche séquentielles simultanées, augmentez cette valeur.
sort_buffer Chaque thread qui a besoin de classer des données alloue un
buffer de sort_buffer octets. Augmentez cette valeur pour accélerer
les clauses ORDER BY ou GROUP BY. table_cache Le nombre de tables ouvertes par tous les threads. Augmenter
cette valeur revient à augmenter le nombre de pointeur de fichier dont
mysqld a besoin. MySQL a besoin de deux pointeurs
de fichiers pour chaque table. Voir ci-dessous les remarques à propos de la
limite du nombre de pointeur de fichier. Pour des détails concernant le cache
des tables, tmp_table_size Si une table temporaire excède cette taille,
MySQL génère une erreur sous la forme : The table
nom_table is full. Augmentez la valeur de tmp_table_size
pour réaliser des requêtes GROUP BY plus compliquées.
thread_stack La taille de la pile pour chaque thread. La plus part du temps,
les erreurs repérées par crash-me dépendent de cette valeur. La
valeur par défaut est généralement suffisante. wait_timeout Le nombre de seconde d'inactivité d'une connexion avant qu'elle
soit fermée.
table_cache, max_connections et max_tmp_tables
limite le nombre maximal de fichier que le serveur peut avoir ouvert en même
temps. Si vous augmentez ces valeurs, vous risquez d'être limité par votre
système d'exploitation. Cependant, il est possible d'augmenter le nombre de
pointeur de fichier par processus, sur certains systèmes. Consultez la
documentation de votre système, car ces manipulations varient beaucoup de l'un à
l'autre. table_cache est lié à max_connections. Par exemple, pour
200 connexions, vous devez avoir un cache de table d'au moins 200 *
n, avec n nombre maximum de tables dans un regroupement.
MySQL utilise des algorithmes très efficaces, ce qui permet de
le faire tourner avec peut de mémoire. Cependant, pour accélérer les traitement,
allouez plus de mémoire à MySQL. En ayant beaucoup de mémoire, et beaucoup de
table, si vous souhaitez de bonne performances, avec un nombre modéré de
clients, utilisez une configuration telle que :
shell> safe_mysqld -O key_buffer=16M -O table_cache=128 \
-O sort_buffer=4M -O record_buffer=1M &
Si vous avez peu de mémoire et beaucoup de connexion, utilisez une
configuration telle que :
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=100k \
-O record_buffer=100k &
voire même :
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \
-O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
Si le nombre de connexion est vraiment très grand, le système va commencer à
swapper, à moins que mysqld n'ait été configuré pour utiliser très
peu de mémoire pour chaque connexion. Bien entendu, mysqld
fonctionne bien mieux si vous avez assez de mémoire pour toutes les connexions.
NB : si vous changez une option de mysqld, cette dernière ne
sera prise en compte qu'à la prochaine instance du serveur.
Pour voir si les changement de paramètres ont été pris en compte, utilisez la
commande :
shell> mysqld -O key_buffer=32m --help
Assurez vous que l'option --help est mise en dernier, sinon les
options placées après seront ignorées.