| 7.5 Optimiser le serveur MySQL
 7 Optimisation de MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Réglage du système, au moment de la compilation, et paramètres du démarrage
 ->Réglage des paramètres du serveur
 . Contrôle des performances de l'optimisateur de requêtes
 . Influences de la compilation et des liaisons sur la vitesse de MySQL
 . Comment MySQL gère la mémoire
 . Comment MySQL utilise le DNS
 
 
 | 
  7.5.2 Réglage des paramètres du serveur     
 
Vous pouvez obtenir les tailles par défaut des tampons du serveur  
mysqld
 
avec la commande:
Cette commande génère une liste de toutes les options de  
mysqld
  et des 
variables configurables. Cette sortie comprend les valeurs par défaut et 
ressemble à cela : Si un serveur  
mysqld
  est en cours d'exécution, vous pouvez voir les 
valeurs que les variables utilisent réellement en exécutant la commande : 
 
Vous pouvez obtenir les statistiques et différents indicateurs
de statut pour un serveur en fonctionnement avec cette commande : 
 
Les variables de serveur et de statut sont aussi accessibles avec
 
mysqladmin
 :| 
Possible variables for option --set-variable (-O) are:back_log                 current value: 5
 bdb_cache_size           current value: 1048540
 binlog_cache_size        current value: 32768
 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
 interactive_timeout      current value: 28800
 join_buffer_size         current value: 131072
 key_buffer_size          current value: 1048540
 lower_case_table_names   current value: 0
 long_query_time          current value: 10
 max_allowed_packet       current value: 1048576
 max_binlog_cache_size    current value: 4294967295
 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
 max_write_lock_count     current value: 4294967295
 myisam_sort_buffer_size  current value: 8388608
 net_buffer_length        current value: 16384
 net_retry_count          current value: 10
 net_read_timeout         current value: 30
 net_write_timeout        current value: 60
 read_buffer_size         current value: 131072
 record_rnd_buffer_size   current value: 131072
 slow_launch_time         current value: 2
 sort_buffer              current value: 2097116
 table_cache              current value: 64
 thread_concurrency       current value: 10
 tmp_table_size           current value: 1048576
 thread_stack             current value: 131072
 wait_timeout             current value: 28800
 | 
 Vous pouvez trouver une description complète de toutes les variables système
dans les sections  Variables sytème du serveur  et  Variables de statut du serveur .| 
shell> mysqladmin variablesshell> mysqladmin extended-status
 | 
 
MySQL utilise des algorithmes très extensibles, donc vous pouvez utiliser très 
peu de mémoire. Si malgré tout vous fournissez plus de mémoire à MySQL, vous
obtiendrez également de meilleures performances.
Les deux variables les plus importantes au moment du réglage d'un serveur 
MySQL sont  
key_buffer_size
  et  
table_cache
 .  Vous devriez
vous assurer que celles sont sont bien paramétrées avant de modifier les
autres variables. 
Les exemples suivants indiquent quelques valeurs typiques pour différentes
valeurs de configuration. Les exemples utilisent le script  
mysqld_safe
  et
utilisent la syntaxe  
--name=value
  pour donner à la variable appelée 
 
name
  la valeur  
value
 . Cette syntaxe est disponible depuis MySQL 4.0.
Pour les anciennes versions de MySQL, prenez en compte ces différences :
 
Si vous avez beaucoup de mémoire (>=256 Mo) et beaucoup de tables, et que
vous désirez des performances maximales avec un faible de nombre de clients,
vous devriez essayer quelque chose cela:
Utilisez  
safe_mysqld
  plutôt que  
mysqld_safe
 .
Utilisez la syntaxe de modification des variables  
--set-variable=nom=valeur
  ou
 
-O name=value
 .
Pour les noms de variables qui finissent par  
_size
 , vous pouvez les spécifier
sans le suffise  
_size
 . Par exemple, l'ancien nom de  
sort_buffer_size
  est
 
sort_buffer
 . L'ancien nom de  
read_buffer_size
  est
 
record_buffer
 . Pour voir quelles variables votre version du serveur reconnaît,
utilisez  
mysqld --help
 . Si vous n'avez que 128 Mo et seulement quelques tables, mais que vous demandez
beaucoup de classements, vous pouvez essayer cela :| 
shell> safe_mysqld -O key_buffer=64M -O table_cache=256 \-O sort_buffer=4M -O read_buffer_size=1M &
 | 
 Si vous avez peu de mémoire et beaucoup de connections, essayez cela:| 
shell> safe_mysqld -O key_buffer=16M -O sort_buffer=1M
 | 
 Ou encore:| 
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=100k \-O read_buffer_size=100k &
 | 
 Si vous utilisez  
GROUP BY
  ou  
ORDER BY
  sur des fichiers de taille
supérieure à la mémoire disponible, vous devriez augmenter la valeur de 
 
record_rnd_buffer
  pour accélérer la lecture des lignes après que le
classement ait été fait.| 
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \-O table_cache=32 -O read_buffer_size=8k -O net_buffer_length=1K &
 | 
 
A l'installation de MySQL, un répertoire  
support-files
  est créé, et contient
plusieurs exemples de fichiers  
my.cnf
 :  
my-huge.cnf
 ,  
my-large.cnf
 ,
 
my-medium.cnf
  et  
my-small.cnf
 . Vous pouvez les utiliser comme base pour 
optimiser votre système.
Si vous avez vraiment beaucoup de connections, des problèmes peuvent apparaître
avec le fichier d'échange si  
mysqld
  n'a pas été configuré pour utiliser
peu de mémoire pour chaque connexion.  
mysqld
  fonctionne mieux si vous
avec suffisamment de mémoire pour toutes les connections, bien sûr ! 
Notez que si vous changez une option de  
mysqld
 , elle ne prendra effet
qu'au prochain démarrage du serveur.
Pour voir les effets d'un changement de paramètre, essayez quelque chose comme ca: Les valeurs des variables sont listées vers la fin du résultat.
Assurez vous bien de la présence de l'option  
--help
  en fin de ligne; si ce n'est
pas le cas, les options listées après dans la ligne de commande ne seront pas prises 
en compte à la sortie.Pour plus d'information sur le paramétrage du moteur  
InnoDB
 , voyez la section
 Paramétrage optimale d'
InnoDB
 .| 
shell> mysqld -O key_buffer=32m --help
 | 
 |