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énérer 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 100 Mo/s, 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
--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.
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énérait 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.