Hinweis: Dieser Artikel wurde urspruenglich im Jahr 2014 veroeffentlicht. Einige Schritte, Befehle oder Softwareversionen haben sich moeglicherweise geaendert. Pruefen Sie die aktuelle MySQL-Dokumentation fuer die neuesten Informationen.

In dieser Schritt-fuer-Schritt-Anleitung erfahren Sie, wie Sie MySQLTuner installieren und verwenden, um Ihre MySQL-Konfiguration / Leistung zu optimieren. MySQL ist ein relationales Open-Source-Datenbankmanagementsystem, das haeufig in Webanwendungen verwendet wird, insbesondere mit PHP und WordPress.

Anleitung: MySQLTuner installieren und verwenden, um Ihre MySQL-Konfiguration / Leistung zu optimieren

Ich schreibe diesen Beitrag hauptsaechlich, weil es meiner Meinung nach einen viel besseren Weg gibt, MySQLTuner auf Ihrem Rechner zu installieren, als das uebliche apt-get install MySQLTuner. Wie viele von Ihnen wahrscheinlich bereits wissen, ist MySQLTuner ein bekanntes und weit verbreitetes Tool. Es gibt Ihnen eine sehr schoene Zusammenfassung darueber, wie Ihre Konfiguration funktioniert, und zeigt Ihnen, wo Sie Verbesserungen vornehmen koennen, um noch bessere Leistung aus Ihrem Datenbankserver herauszuholen. Ich empfehle generell, Percona zu installieren (was ein Drop-in-Ersatz fuer MySQL ist). Percona basiert auf MySQL-Code, ist aber cooler (sie fuegen mehr Leistungsfunktionen hinzu, die Sie moeglicherweise nur in der kommerziellen MySQL-Version finden, und sie sind besser darin, aktuell zu bleiben, als Oracle). Deshalb habe ich sogar im Artikel: (</databases/mysql/install-mysql-ubuntu-server/> “How to: Install MySQL in an Ubuntu Server”) Anweisungen geschrieben, wie man Percona anstelle von MySQL als vorgeschlagene Alternative am Ende installiert.

Unabhaengig davon ist, wie ich bereits erwaehnt habe, der Hauptgrund fuer diesen Artikel, sich auf eine Alternative zum einfachen apt-get install MySQLTuner zu konzentrieren. Und warum? Nun, schauen wir uns an, was das Ausfuehren dieses Befehls auf einer meiner Serverboxen zu sagen hat:

apt-get install MySQLTuner Reading package lists… Done Building dependency tree Reading state information… Done The following packages were automatically installed and are no longer required : libperconaserverclient18.1 percona-server-common-5.6 Use ‘apt-get autoremove’ to remove them. The following extra packages will be installed : libhtml-template-perl libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 Suggested packages: libipc-sharedcache-perl tinyca mailx The following packages will be REMOVED : percona-server-client-5.6 percona-server-server-5.6 The following NEW packages will be installed: libhtml-template-perl libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 mysqltuner 0 upgraded, 9 newly installed, 2 to remove and 0 not upgraded. Need to get 24.8 MB/24.8 MB of archives. After this operation, 20.4 MB disk space will be freed. Do you want to continue ? N Abort.

Wie fett hervorgehoben, wird das Installationsprogramm versuchen, Percona Server zu entfernen, stattdessen MySQL und eine Reihe anderer Bibliotheken zu installieren. Meistens ist das in Ordnung, aber oft stellen Sie fest, dass Sie nur das Tool moechten und mit Percona zufrieden sind, wie ich es bin. Was also tun?

Gluecklicherweise ist MySQLTuner ein in Perl geschriebenes Tool und benoetigt nur Client-Bibliotheken, um sich mit MySQL zu verbinden, was kein grosses Problem ist (Percona-Client ist verfuegbar). Gehen Sie einfach zu: https://github.com/major/MySQLTuner-perl und laden Sie die Datei mysqltuner.pl herunter, um die neueste Version zu erhalten (fuehren Sie wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl aus). Sobald Sie das Skript heruntergeladen haben, muessen Sie nur zum Speicherort gehen und perl mysqltuner.pl ausfuehren und voila!

Wenn Sie nun nach Tipps zur Verwendung dieses Tools und empfohlenen Aenderungen suchen, hier sind einige Highlights:

I. Wenn Sie nur PHP verwenden (denken Sie an WordPress), dann aendern Sie definitiv den wait_timeout.

Standardmaessig betraegt er 8 Stunden, aber wenn die Anwendung aus irgendeinem Grund die Verbindung nicht schliesst, kann sie bis zu 8 Stunden bestehen bleiben (so erhalten Sie viele schlafende offene Verbindungen, die Ressourcen verbrauchen).

wait_timeout = 30 #default is 28800

Sie koennen den interactive_timeout so lassen. Dies ist generell ein hoeherer Wert als wait_timeout und erfordert, wie Sie vermuten koennen, Interaktion, um im Wartezustand zu bleiben.

II. Aendern Sie die maximale Anzahl von Verbindungen.

Bei meiner Installation war sie 500! Jede Verbindung verbraucht ein wenig Ressourcen, auch wenn sie nicht verwendet wird. MySQLTuner kann Ihnen im Laufe der Zeit zeigen, was die maximale Anzahl von Verbindungen ist, die Sie letztendlich verwenden, damit Sie entsprechend anpassen koennen. Wenn Sie zum Beispiel PHP-FPM verwenden, werden Sie hoechstwahrscheinlich nicht mehr Verbindungen als die maximale Anzahl von Kind-Prozessen verwenden. Beruecksichtigen Sie dies und untersuchen Sie die Ausgabe von MySQLTuner, um die beste Zahl zu ermitteln. Belassen Sie Ihre maximale Anzahl von Verbindungen (nachdem MySQL mindestens 24 Stunden gelaufen ist, vorzugsweise 7 Tage, damit Sie Metriken fuer eine ganze Woche erhalten) bei etwa 80% (erhoehen Sie also die maximale Nutzung um 25%, wenn Sie diese Variable einrichten).

max_connections = 50 #default is 500

III. MySQLTuner ausfuehren

Schauen wir uns einige Ausgaben an:

perl mysqltuner.pl >> MySQLTuner 1.3.0 - Major Hayden major@mhtx.net >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with ‘—help’ for additional options and output filtering -------- Security Recommendations ------------------------------------------- All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- Up for: 4h 51m 32s (354K q , 3K conn, TX: 2B, RX: 45M) Reads / Writes: 90% / 10% Total buffers: 420.0M global + 1.1M per thread (26 max threads) Maximum possible memory usage: 447.6M (14% of installed RAM) Slow queries: 0% (56/354K) Highest usage of available connections: 42% (11/26) Key buffer size / total MyISAM indexes: 16.0M/100.0K Key buffer hit rate: 99.0% (100 cached / 1 reads) Query cache efficiency: 78.9% (260K cached / 330K selects) Query cache prunes per day: 0 Sorts requiring temporary tables: 0% (0 temp sorts / 6K sorts) Temporary tables created on disk: 36% (3K on disk / 8K total) Thread cache hit rate: 99% (11 created / 3K connections) Table cache hit rate: 28% (363 open / 1K opened) Open file limit used: 0% (48/65K) Table locks acquired immediately: 100% (85K immediate / 85K locks) InnoDB buffer pool / data size: 128.0M/49.3M InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance MySQL started within last 24 hours - recommendations may be inaccurate When making adjustments, make tmp_table_size/max_heap_table_size equal Reduce your SELECT DISTINCT queries without LIMIT clauses Variables to adjust: tmp_table_size (> 30M) max_heap_table_size (> 30M)

Wie ich bereits erwaehnt habe, sollten Sie dies mindestens 24 Stunden nach dem Start von MySQL gegen Ihren Server ausfuehren, damit die Empfehlungen moeglichst genau sind (ich wuerde empfehlen, es nach 7 Tagen, 30 Tagen usw. erneut auszufuehren, da Sie moeglicherweise mehr Einblicke gewinnen, je mehr der Server genutzt wird). Aber bitte denken Sie nicht, dass Sie keine wichtigen Informationen erhalten, wenn Sie es beispielsweise eine Stunde oder sofort nach dem Start ausfuehren. Sofort nach dem Start koennen Sie sehen, ob Sie etwas mit dem Speicher vermasselt haben. Nach einer Stunde koennen bereits wertvolle Einblicke vorhanden sein, wenn Sie gerade erst mit der Optimierung Ihres Setups beginnen. Zum Beispiel habe ich hier bereits die gesamte Groesse fuer meine temporaeren Tabellen aufgebraucht, sodass dieser Fehler hoechstwahrscheinlich nicht verschwinden wird, egal wie lange ich MySQL laufen lasse. Mit der Zeit werden Sie lernen, auf welche Empfehlungen Sie warten sollten und welche Sie sofort umsetzen koennen.

In Bezug auf diese Empfehlung beachten Sie auch die vorherige: “Bei Anpassungen sollten tmp_table_size und max_heap_table_size gleich sein”.

Alle Aenderungen an Ihrer /etc/mysql/my.cnf erfordern normalerweise einen Dienstneustart. Ich habe den reload-Parameter ausprobiert, aber mysqltuner scheint die Aenderung nicht zu bemerken.

Mein letzter Ratschlag ist, sich auf die Leistungsmetriken und den Empfehlungsabschnitt zu konzentrieren:

  1. Wenn Sie Ihre Serverbox mit anderen Anwendungen teilen, versuchen Sie, die maximal moegliche Speichernutzung innerhalb Ihrer Schaetzungen zu halten, wie viel RAM Sie bereit sind, MySQL zuzuweisen.
  2. Wie erwaehnt, stellen Sie sicher, dass Ihre maximale Anzahl von Verbindungen bei etwa 80% Ihrer verfuegbaren liegt. Lassen Sie MySQL eine Weile laufen und fuegen Sie 25% mehr Verbindungen zum Maximum hinzu, das Sie erhalten.
  3. Konfigurieren Sie langsame Abfragen. Geben Sie an, wie viele Sekunden eine langsame Abfrage ausmachen, und sehen Sie, ob Sie wenige oder zu viele erhalten.
  4. Stellen Sie sicher, dass alle Puffer genuegend RAM haben.
  5. Konfigurieren Sie Ihre Swappiness auf einen niedrigen Wert. Das Swappen von RAM nimmt einem MySQL-Server etwas Leistung weg. Denken Sie daran, dass Sie die meisten dieser Puffer / Caches verwenden, um zu vermeiden, auf die Festplatte zugreifen zu muessen, um Informationen zu erhalten. Weitere Informationen zur Konfiguration der Aggressivitaet des Swappings finden Sie in diesem Beitrag: (</linux/ubuntu/configure-swappiness-ubuntu/> “How to: Configure Swappiness in Ubuntu”)
  6. Bleiben Sie ruhig und verbessern Sie Ihre Konfiguration weiter ;). Sie werden feststellen, dass kein Server direkt nach der Installation gleich ist. Mit der Zeit und dem Blick auf die Metriken werden Sie sehen, ob Sie hauptsaechlich schreiben oder lesen, Ihre Aktivitaet und Speicherbeduerfnisse kennen und den Server besser dimensionieren und Parameter an die empfangene Last anpassen. Percona hat ein Tool, das Ihnen hilft, Startwerte zu ermitteln unter: https://tools.percona.com/wizard. Bedenken Sie, dass Sie diese verstehen und vielleicht einzeln anwenden sollten, anstatt das Ganze einfach zu kopieren. Wenn Ihr Server zuvor verwendet wurde, koennten einige der neuen Einstellungen ihn zum Absturz bringen, da er Tabellen mit anderen Einstellungen erstellt hat. Ausserdem koennte die Verwendung einiger Parameter Anwendungen wie WordPress beschaedigen.

(http://img.zemanta.com/zemified_h.png?x-id=c89eacd2-c247-4ece-ba8a-028aabcefe70)](http://www.zemanta.com/?px “Enhanced by Zemanta”)

Zusammenfassung

Sie haben erfolgreich gelernt, wie man MySQLTuner installiert und verwendet, um Ihre MySQL-Konfiguration / Leistung zu optimieren. Wenn Sie auf Probleme stossen, ueberpruefen Sie die Voraussetzungen und stellen Sie sicher, dass Ihre MySQL-Umgebung richtig konfiguriert ist.

Verwandte Artikel