:: DEVELOPER ZONE
Die meisten der folgenden Tests wurden mit den MySQL-Benchmarks unter Linux durchgeführt, aber sie sollten einen guten Anhaltspunkt für andere Betriebssysteme und Auslastungen geben.
Sie erhalten die schnellste ausführbare Datei, wenn Sie mit -static
linken.
Unter Linux erhalten Sie den schnellsten Code, wenn Sie mit pgcc und
-O3 kompilieren. Um sql_yacc.cc mit diesen Optionen zu
kompilieren, brauchen Sie etwa 200 MB Arbeitsspeicher, weil gcc/pgcc
viel Speicher benötigt, um alle Funktionen inline zu machen. Sie sollten
beim Konfigurieren von MySQL auch CXX=gcc setzen, um das
Einschließen der libstdc++-Bibliothek zu vermeiden (die nicht
benötigt wird). Beachten Sie, dass bei einigen Version von pgcc der
erzeugte Code nur auf echten Pentium-Prozessoren läuft, selbst wenn Sie in
den Compiler-Optionen angeben, dass Sie wollen, dass der Code auf alle
Prozessoren vom Typ x586 läuft (wie AMD).
Einfach durch die Benutzung eines besseren Compilers und / oder besserer Compiler-Optionen können Sie eine 10-30%-ige Geschwindigkeitssteigerung in Ihrer Applikation erhalten. Das ist besonders wichtig, wenn Sie den SQL-Server selbst kompilieren!
Wir haben sowohl Cygnus CodeFusion als auch Fujitsu-Compiler getestet, aber es stellte sich heraus, dass keiner von beiden ausreichend Bug-frei war, damit MySQL mit angeschalteten Optimierungen kompiliert werden konnte.
Wenn Sie MySQL kompilieren, sollten Sie nur Unterstützung für die
Zeichensätze einschließen, die Sie benutzen werden (Option
--with-charset=xxx). Die Standard-MySQL-Binärdistributionen werden
mit Unterstützung für alle Zeichensätze kompiliert.
Hier ist eine Auflistung einiger Messungen, die wir durchgeführt haben:
Wenn Sie pgcc benutzen und alles mit -O6 kompilieren, ist der
mysqld-Server 1% schneller als mit gcc 2.95.2.
Wenn Sie dynamisch linken (ohne -static), ist das Ergebnis unter
Linux 13% langsamer. Beachten Sie, dass Sie dennoch dynamisch gelinkte
MySQL-Bibliotheken benutzen können. Nur beim Server ist das kritisch in
Bezug auf Performance.
Wenn Sie Ihre mysqld-Binärdatei mit strip libexec/mysqld
strippen, ist die resultierende Binärdatei bis zu 4% schneller.
Wenn Sie sich über TCP/IP statt über Unix-Sockets verbinden, ist das auf
demselben Computer 7,5% langsamer. (Wenn Sie sich zu localhost
verbinden, benutzt MySQL vorgabemäßig Sockets.)
Wenn Sie sich über TCP/IP von einem anderen Computer über ein 100-MBit-Ethernet verbinden, ist das 8% bis 11% langsamer.
Wenn Sie mit --with-debug=full kompilieren, verlangsamen sich die
meisten Anfragen um 20%, manche Anfragen jedoch werden wesentlich langsamer
(der MySQL-Benchmarks zeigte 35%). Wenn Sie --with-debug benutzen,
beträgt die Verlangsamung nur 15%. Wenn Sie eine mysqld-Version, die
mit --with-debug=full kompiliert wurde, mit --skip-safemalloc
starten, ist die Geschwindigkeit etwa dasselbe, als wenn Sie mit
--with-debug konfigurieren.
Auf einer Sun SPARCstation 20 ist SunPro C++ 4.2 5% schneller als
gcc 2.95.2.
Das Kompilieren mit gcc 2.95.2 für ultrasparc mit der Option
-mcpu=v8 -Wa,-xarch=v8plusa ergibt 4% mehr Performance.
Auf Solaris 2.5.1 sind MIT-pThreads 8% bis 12% langsamer als Solaris-native Threads, auf einem Einprozessorsystem. Bei mehr Last / Prozessoren sollte der Unterschied größer werden.
Laufenlassen mit --log-bin macht MySQL 1% langsamer.
Wenn beim Kompilieren unter Linux-x86 mit gcc keine Frame-Pointers
-fomit-frame-pointer oder -fomit-frame-pointer -ffixed-ebp
verwendet werden, ist mysqld 1% bis 4% schneller.
Die MySQL-Linux-Distribution, die von MySQL AB zur Verfügung gestellt wird,
wurde früher mit pgcc kompiliert, aber wir mussten zum normalen gcc
zurück gehen, weil es einen Bug in pgcc gibt, der Code erzeugt, der
nicht auf AMD läuft. Wir werden gcc solange benutzen, bis dieser Bug
behoben ist. Bis dahin können Sie, falls Sie keine AMD-Maschine haben, eine
schnellere Binärdatei erhalten, wenn Sie mit pgcc kompilieren. Die
Standard-MySQL-Linux-Binärdatei wird statisch gelinkt, um sie schneller und
portierbarer zu machen.
© 1995-2005 MySQL AB. All rights reserved.
