2008-12-12 16 views
40

Welches ist das beste, benutzerfreundlichste Leistungstool für MySQL? Ich hätte gerne Hilfe beim Lokalisieren des Flaschenhalses meines Setups. Ist das Problem in den SQL-Anweisungen, den Einstellungsvariablen oder etwas anderem?Bestes MySQL Performance Tuning Tool?

Antwort

72

Die schlechte Nachricht: Es gibt GUI-Tools, die dabei helfen, aber es ist eine qualifizierte und weit reichende Arbeit. Sie decken also nicht alles ab, es ist wahrscheinlich, dass Sie Befehlszeilen-Anweisungen/SQL-Anweisungen usw. verwenden müssen, um zu helfen. Ich habe nur die Befehlszeilenwerkzeuge wirklich benutzt. Ich gebe ein bisschen eine Übersicht über die Dinge, die ich kenne/verwendet habe:

Zuerst benötigen Sie eine gute Datenbank-Design. Wenn das Design schlecht ist, kann man nur so weit kommen. Dies umfasst die Normalisierung sowie die Verwendung geeigneter Typen für Felder. Ich werde diesen Punkt hier lassen, da ich denke, es ist ein bisschen daneben und nicht das, wonach Sie suchen.

Stellen Sie sicher, dass der MySQL Query Cache eingerichtet ist und funktioniert und geben Sie ihm ein bisschen mehr RAM, wenn Sie können, und stellen Sie sicher, dass Ihre wichtigen Abfragen nichts tun, was MySQL zwischenspeichert. Wenn Sie beispielsweise die Funktion NOW() in Abfragen verwenden, ändert sich dies - aus offensichtlichen Gründen - JETZT mit jeder Sekunde! Sie können stattdessen einen Zeitstempel in den SQL-Wert eingeben und die Zeit auf die nächste Minute/Stunde/Tag (den größten Zeitraum, den Sie verwenden können) verwenden, um MySQL einige Caching-Vorteile zu verschaffen.

So beginnen Sie, Dinge zu optimieren: "EXPLAIN" vor select anzuheften, ist DIE Möglichkeit zu sehen, wie eine Abfrage ausgeführt wird und wie sie verbessert werden kann. Lernen Sie, wie Sie die Ausgabe interpretieren: Sie können häufig neue Indizes hinzufügen/hinzufügen, um vorhandene zu verbessern. Aber Sie werden auch Zeiten begegnen, in denen Abfragen neu strukturiert werden müssen.

Beginnen Sie die Leistung mit MySQL zu verbessern (vorausgesetzt, Sie wissen nicht, was die Problemabfrage ist), überprüfen Sie das langsame Abfrageprotokoll - es protokolliert alle Abfragen, die länger als x Sekunden dauern.

Übersicht, einschließlich Config für, wenn es nicht bereits protokolliert, ist hier: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - Ich habe auch festgestellt, dass die Einstellung long_query_time auf 0 für einen Tag oder so, so dass alle Abfragen hier mit der Zeit protokolliert werden, ist ein nützliche Weise, um eine Vorstellung davon zu bekommen, wo genau die Leistung läuft. Aber ich würde nicht sofort dorthin gehen! Und lassen Sie es nicht, die Protokolle können massiv werden.

Sobald Sie ein paar Tage der Protokollierung haben, habe ich mysqlsla (Mysql Slow Log Analyzer) von hier gefunden: http://hackmysql.com/mysqlsla ist ein gutes Werkzeug.

Es kann mehr tun als nur langsame Abfrageprotokollanalyse - lesen Sie das Handbuch. Aber um zu erklären, was es für langsame Logs macht: Das langsame Abfrageprotokoll kann eine Menge Daten enthalten, so dass es schwierig sein kann, herauszufinden, welche Abfragen am teuersten sind - zB: Faktor, wie oft sie laufen und wann zwei Abfragen sind eigentlich die gleichen mit einer anderen ID in einer Where-Klausel.

MySQL sla macht das alles für Sie. Es durchläuft das Protokoll und kann Abfragen gruppieren, die in den Where-Klauseln identisch sind/unterschiedliche Werte haben. Es präsentiert Ihnen dann (standardmäßig) die Top 10 Abfragen in Bezug auf die Gesamtausführungszeit - die oft einige Überraschungen hat, aber in der Regel der produktivste Ausgangspunkt ist - nehmen Sie die teuerste Abfrage und verwenden Sie EXPLAIN darauf und sehen Sie, ob Sie verbessern können es.

Einige Abfragen dauern sehr lange und können nicht einfach verbessert werden. Können Sie in diesem Fall die Daten auf andere Weise erhalten oder zumindest zwischenspeichern? Möglicherweise stellen Sie sogar fest, dass das Ändern des DB-Schemas erforderlich ist. In ähnlicher Weise können einige Abfragen am Anfang der mysqlsla-Ausgabe stehen, weil Sie sie häufig ausführen (insbesondere wenn long_query_time auf 0 gesetzt ist), auch wenn sie ziemlich schnell ausgeführt werden. Vielleicht ist es an der Zeit, etwas Caching zu Ihrer App hinzuzufügen?

http://www.maatkit.org/ sieht auch vielversprechend - nie verwendet, aber die mk-Abfrage-Profiler-Tool sollte nützlich sein, um weiter zu untersuchen, warum Abfragen langsam.

Eine völlig separate Sache, die man sich auch anschauen sollte: die "status" -Seite in PHPMYADMIN (oder Sie können alle Abfragen ausführen, um diese Informationen zu erzeugen ....) - es hebt Dinge hervor, die es für schlecht hält, in rot, und können Sie sehen, wo Sie von der Zuweisung von Systemressourcen profitieren können. Ich weiß nicht viel darüber - mein Ansatz war immer, dass, wenn etwas rot ist und schlecht aussieht, darüber nachzulesen und zu entscheiden, ob es wichtig ist und ob ich etwas tun sollte (normalerweise bedeutet das, dass ich mehr Ressourcen MySQL zuweisen muss) durch Ändern der Konfiguration).

Kürzlich habe ich festgestellt, dass die Ausführung von SHOW PROCESSLIST auch auf einem Server, der leidet, nützlich sein kann. Während es nur Live-Informationen gibt (gut, ein Live-Snapshot), kann es Ihnen helfen, ein Gefühl dafür zu bekommen, was zu einem bestimmten Zeitpunkt passiert, besonders wenn Sie ein paar Mal aktualisieren und die Änderungen beobachten. Ich habe kürzlich einen Server entdeckt, der alle verfügbaren mysql-Verbindungen verwendet, um eine identische Abfrage mit dieser Methode auszuführen. Sicher, es wäre im langsamen Abfrageprotokoll gewesen, aber das war eine wirklich schnelle und offensichtliche Art zu sehen, was los war.

+2

Wow ... amüsiert dies nach fast einem Jahr angenommen, um zu sehen bekam :) – benlumley

+0

+1 für die erklären, hier eine Menge an meinem Projekt helfen! –

+1

Wie ich es verstehe, fusionierten mysqlsla und maatkit zu percona toolkit. Nichtsdestoweniger, ist eine gute mysql langsame Abfrage Log Viewer Web-basierte https://github.com/benkaiser/mysql-slow-query-log-visualizer – Bachor

6

EXPLAIN ist dein Freund. Abgesehen davon müssen Sie sich auf eine Mischung aus Ad-hoc-Tools, Tests und den Betriebssystem-Tools verlassen, um genau zu sehen, was vor sich geht.

Viele Dinge können entweder von den OS-Tools (gut zur Bestimmung, ob eine CPU- oder IO-gebundene Situation ist) oder den verschiedenen Variablen, die in MySQL selbst zu sehen sind, angezeigt werden (globale Variablen anzeigen, Engine innodb-Status anzeigen) etc).

Ich denke, dass es wirklich wichtig ist, eine PERFORMANCE TEST UMGEBUNG zu haben. Erstellen Sie eine produktionsgroße Datenbank mit produktionsähnlicher Last (mithilfe der Lastsimulation), die auf Produktionshardware in Ihrem Labor ausgeführt wird (teuer aber notwendig).

Sobald Sie das getan haben, können Sie beliebige Parameter in völliger Sicherheit optimieren, wissen, dass selbst wenn es den gesamten Server schmilzt, Sie es einfach neu aufbauen können, ohne irgendetwas zu beeinflussen.

Machen Sie keine spezifischen Dinge, die von Menschen vorgeschlagen werden, es sei denn, Sie haben sie in Ihrer Leistungstestumgebung getestet und als nachweislich nützlich eingestuft.

wesentlichen Performance-Tuning sieht in der Regel auf drei Bereiche, in dieser Reihenfolge:

  • Struktur der Datenbank selbst (Tabellenstruktur, Indizes etc.)
  • Abfragen
  • Tuning der Server-Parameter

Die ersten beiden werden oft zugunsten der letzten übersehen, die aber erst nach den ersten beiden helfen können.

Nicht zu unterschätzen, wie wichtig es ist, den Arbeitsaufwand des Servers zu reduzieren - kleinere Felder, weniger Zeilen, weniger Spalten usw. sind immer besser.

4

Ich fand MONyog eine große Hilfe zu sein, wenn ich einen leidenden MySQL-Server hatte.

Es ist ein webbasiertes System, das Ihr System rund um die Uhr analysiert und Ihnen anständige Vorschläge für bessere Werte von Systemvariablen, Cache-Größen usw. gibt.

Es hat auch eine eingebaute MySQL Query Analyzer Funktion.

Schade, dass es nicht frei ist. enter image description here

MONyog- MySQL Monitor und Advisor hat neue Benutzeroberfläche, die ich liebe es, Ich mag diese Funktionen meist:

  1. Suche Problem SQL - langsam log, allgemeine Protokoll, PROCESS mit und durch PROXY
  2. Benachrichtigung auf kritische Bedingungen wie - Server erreichbar ist, zu viele Verbindungen etc ..
  3. regelmäßig Ihre eigene eigene Abfrageergebnis-Monitor Replikation Überwachung

    etc .... Complete feature list