Die meisten der folgenden Tests wurden unter Linux mit den MySQL-Benchmarks durchgeführt, sie sollten aber trotzdem ausreichend aussagekräftig auch für andere Betriebssysteme und Belastungsbereiche sein.
Sie erhalten die schnellsten ausführbaren Dateien, indem Sie
mit der Option -static
verknüpfen.
Unter Linux kompilieren Sie den Server am besten mit
pgcc und -O3
. Sie benötigen
etwa 200 Mbyte Speicher zur Kompilierung von
sql_yacc.cc
mit diesen Optionen, weil
gcc oder pgcc eine Menge
Speicher benötigt, um alle Funktionen zu integrieren. Ferner
sollten Sie bei der Konfiguration von MySQL
CXX=gcc
einstellen, um die Miteinbeziehung
der Bibliothek libstdc++
zu vermeiden, denn
diese wird nicht benötigt. Beachten Sie, dass bei einigen
Versionen von pgcc die resultierende
Binärdatei nur auf echten Pentium-Prozessoren läuft, auch wenn
Sie eine Compileroption verwendet haben, mit der Sie angeben
wollten, dass der Ergebniscode auf allen x586-Prozessoren
(z. B. AMD) laufen soll.
Sie können eine Geschwindigkeitszunahme von 10 bis 30 Prozent erzielen, indem Sie einen besseren Compiler und geeignetere Kompilierungsoptionen verwenden. Dies ist besonders wichtig, wenn Sie den MySQL Server selbst kompilieren.
Als wir die Cygnus CodeFusion- und Fujitsu-Compiler testeten, stellte sich heraus, dass keiner von diesen ausreichend wenig Bugs aufwies, um MySQL mit aktivierten Optimierungen zu kompilieren.
MySQL-Standarddistributionen werden mit der Unterstützung für
alle Zeichensätze kompiliert. Wenn Sie MySQL selbst
kompilieren, sollten Sie die Unterstützung nur für diejenigen
Zeichensätze integrieren, die Sie tatsächlich verwenden
werden. Dies wird mit der Option --with-charset
für configure gesteuert.
Es folgt eine Liste einiger Maßnahmen, die wir vorgenommen haben:
Wenn Sie pgcc verwenden und alles mit
-O6
kompilieren, ist der Server
mysqld um ein Prozent schneller als mit
gcc 2.95.2.
Wenn Sie dynamisch verknüpfen (also ohne
-static
), ist das Ergebnis unter Linux um
13 Prozent langsamer. Beachten Sie, dass Sie eine dynamisch
verknüpfte MySQL-Bibliothek weiterhin für Ihre
Clientanwendungen benutzen können. Es ist der Server, der
für die Leistungsfähigkeit die kritischste Komponente
darstellt.
Wenn Sie Ihre mysqld-Binärdatei mit
strip mysqld
bearbeiten, kann die
resultierende Binärdatei um bis zu 4 Prozent schneller
sein.
Bei einer Verbindung von einem Client zu einem Server, der
auf demselben Host läuft, ist die Leistung um 7,5 Prozent
geringer, wenn Sie die Verbindung über TCP/IP statt über
eine Unix-Socketdatei herstellen. (Unter Unix verwendet
MySQL, wenn Sie die Verbindung zum Hostnamen
localhost
herstellen, standardmäßig
eine Socketdatei.)
TCP/IP-Verbindungen von einem Client mit einem Server sind um 8 bis 11 Prozent langsamer, wenn der Server auf einem entfernten System liegt, als bei Verbindung mit einem Server auf demselben Host (und zwar auch bei Verbindungen über 100-Mbit/s-Ethernet).
Bei Ausführung unserer Benchmark-Tests über sichere Verbindungen (d. h., alle Daten wurden durch die interne SSL-Unterstützung verschlüsselt) war die Leistung um 55 Prozent geringer als bei unverschlüsselten Verbindungen.
Wenn Sie mit --with-debug=full
kompilieren,
sind die meisten Abfragen 20 Prozent langsamer. Einige
Abfragen können deutlich länger benötigen; so laufen die
MySQL-Benchmarks um 35 Prozent langsamer. Wenn Sie
--with-debug
(ohne
=full
) angeben, liegt der
Geschwindigkeitsverlust lediglich bei 15 Prozent. Bei einer
Version von mysqld, die mit
--with-debug=full
kompiliert wurde, können
Sie die Speicherüberprüfung zur Laufzeit abschalten, indem
Sie sie mit der Option --skip-safemalloc
starten. Die Ausführungsgeschwindigkeit sollte in diesem
Fall nicht allzu weit unter derjenigen liegen, die sich bei
einer Konfiguration mit --with-debug
erzielen lässt.
Auf einem Sun UltraSPARC-IIe ist ein mit Forte 5.0 kompilierter Server 4 Prozent schneller als ein mit gcc 3.2 kompilierter Server.
Auf einem Sun UltraSPARC-IIe ist ein mit Forte 5.0 kompilierter Server im 32-Bit-Modus 4 Prozent schneller als im 64-Bit-Modus.
Die Kompilierung mit gcc 2.95.2 für
UltraSPARC mit den Optionen -mcpu=v8 -Wa
und -xarch=v8plusa
bietet einen
Leistungszuwachs von 4 Prozent.
Auf Solaris 2.5.1 ist MIT-pthreads 8 bis 12 Prozent langsamer als native Solaris-Threads auf einem einzelnen Prozessor. Bei hoher Belastung oder mehr Prozessoren sollte der Unterschied noch größer sein.
Die Kompilierung auf Linux-x86 mit gcc
ohne Frame-Zeiger (-fomit-frame-pointer
oder -fomit-frame-pointer -ffixed-ebp
)
macht mysqld 1 bis 4 Prozent schneller.
Von MySQL AB angebotene MySQL-Binärdistributionen für Linux wurden früher generell mit pgcc kompiliert. Aufgrund eines Bugs in pgcc, der dazu führte, dass die erzeugten Binärdateien nicht auf AMD-Prozessoren liefen, mussten wir jedoch zu gcc zurückkehren. Wir werden gcc weiterhin verwenden, bis dieser Bug behoben ist. In der Zwischenzeit können Sie, wenn Sie kein AMD-System haben, durch Kompilierung mit pgcc eine schnellere Binärdatei erstellen. Die MySQL-Standardbinärdatei für Linux ist statisch verknüpft, um Geschwindigkeit und Portabilität zu optimieren.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.