5.5 Optimisation du serveur MySQL
5 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 ->Influences de la compilation et des liaisons sur la vitesse de MySQL . Comment MySQL gère la mémoire . Comment MySQL utilise le DNS . Syntaxe de SET
|
5.5.3 Influences de la compilation et des liaisons sur la vitesse de MySQL
La plupart des tests suivants ont été réalisés sous Linux avec les outils comparatifs
de MySQL, mais ils peuvent donner quelques indications pour d'autres systèmes
d'exploitation et sur une charge de travail différente.
Les exécutables les plus rapides sont obtenus en liant avec
-static
.
Sur Linux, le code le plus rapide sera obtenu en compilant avec
pgcc
et
-O3
.
Pour compiler
sql_yacc.cc
avec ces options, il faut environ 200 Mo de mémoire car
gcc/pgcc
demande beaucoup de mémoire pour créer toutes les fonctions d'une traite.
Il est aussi possible d'utiliser
CXX=gcc
à la configuration de MySQL pour éviter
l'inclusion de la bibliothèque
libstdc++
(qui n'est pas nécessaire).
Sachez que pour certaines versions de
pgcc
, le code résultant ne fonctionnera
que sur de vrais processeurs Pentium, même si vous utilisez l'option du compilateur
qui doit génerer du code fonctionnant sur tour les types de processeurs x586 (comme AMD).
L'utilisation du meilleur compilateur et/ou de la meilleur option de compilation permet
de gagner 10 à 30% de vitesse dans vos applications. C'est très important quand vous
compilez le serveur SQL vous-même !
Nous avons compilé avec les compilateurs de Cygnus CodeFusion et de Fujitsu, mais aucun
des deux n'était suffisamment exempt d'erreurs pour permettre la compilation de MySQL
avec l'optimisation.
A la compilation de MySQL, vous devriez uniquement utiliser le support des caractères
que vous allez utiliser. (Option
--with-charset=xxx
.)
Les distributions binaires standards de MySQL sont compilées avec le support de toutes
les gammes de caractères.
Voici une liste des mesures que nous avons effectués:
-
L'utilisation de
pgcc
et la compilation complète avec l'option
-O6
donne
un serveur
mysqld
1% plus rapide qu'avec
gcc
2.95.2.
-
Si vous utilisez la liaison dynamique (sans
-static
), le résultat est 13% plus lent
sur Linux. Sachez que vous pouvez néanmoins utiliser la liaison dynamique pour les
bibliothèques de MySQL. Seul le serveur a des performances critiques.
-
Si vous allégez votre binaire
mysqld
avec l'option
strip libexec/mysqld
,
vous obtenez un binaire jusqu'à 4% plus rapide.
-
Si vous utilisez TCP/IP plutôt que les "sockets" Unix, le résultat est 7.5% plus lent
sur le même ordinateur. (Si vous vous connectez sur
localhost
, MySQL utilisera
les sockets par défaut.)
-
Si vous vous connectez en TCP/IP depuis un autre ordinateur avec un lien Ethernet 100M,
le résultat sera 8 à 11% plus lent.
-
L'utilisation de connections sécurisées ( toutes les données chiffrées par le support
interne de SSL) pour nos tests comparatifs a provoqué une perte de vitesse de 55%.
-
Si vous compilez avec
--with-debug=full
, vous perdrez 20% de performances
sur la plupart des requêtes, mais la perte peut être plus importante
sur certaines requêtes (La suite de tests de MySQL tourne 35% plus lentement).
Si vous utilisez
--with-debug
, vous ne perdrez que 15%.
En démarrant une version de
mysqld
, compilée avec
--with-debug=full
,
avec with
--skip-safemalloc
, le résultat final devrait être proche d'une
compilation avec
--with-debug
.
-
Sur un Sun UltraSPARC-IIe, Forte 5.0 est 4% plus rapide que
gcc
3.2.
-
Sur un Sun UltraSPARC-IIe, Forte 5.0 est 4% plus rapide en mode 32 bit qu'en mode
64 bit.
-
La compilation avec
gcc
2.95.2 sur UltraSPARC avec l'option
-mcpu=v8 -Wa,-xarch=v8plusa
améliore les performances de 4%.
-
Sur Solaris 2.5.1, MIT-pthreads est 8-12% plus lent que la gestion native des threads
de Solaris sur mono-processeur. Avec plus de charge ou de CPU, la différente devrait
être encore plus grande.
-
Le fonctionnement avec
--log-bin
rend mysqld 1% plus lent.
-
La compilation sur Linux-x86 avec gcc sans les pointeurs
-fomit-frame-pointer
ou
-fomit-frame-pointer -ffixed-ebp
rend
mysqld
1 à 4% plus rapide.
Autrefois les distributions fournies par MySQL AB de MySQL-Linux étaient compilées
avec
pgcc
, mais nous avons dû revenir au simple gcc à cause d'un
bogue dans
pgcc
qui génerait du code qui ne fonctionnait pas sur AMD.
Nous continuerons à utiliser gcc tant que ce bogue ne sera pas corrigé.
Néanmoins, si vous avez une machine non-AMD, vous pouvez obtenir des binaires plus rapides
en compilant avec
pgcc
. Le binaire standard de MySQL pour Linux est lié statiquement
pour être plus rapide et plus portable.
|