Verwendung von Mytop zur Überwachung der MySQL-Leistung

Einführung

Mytop ist ein Open Source-Befehlszeilentool zur Überwachung der MySQL-Leistung. Es wurde von dem Linux-Systemüberwachungstool "top" inspiriert und ähnelt dem "Look and Feel". Mytop stellt eine Verbindung zu einem MySQL-Server her und führt regelmäßig die Befehle + show processlist + und + show global status + aus. Anschließend werden die Informationen in einem nützlichen Format zusammengefasst. Mit mytop können wir (in Echtzeit) MySQL-Threads, -Abfragen und -Uptime überwachen sowie feststellen, welcher Benutzer Abfragen auf welcher Datenbank ausführt, welche langsamen Abfragen sind und vieles mehr. All diese Informationen können verwendet werden, um die Leistung des MySQL-Servers zu optimieren.

In diesem Lernprogramm wird erläutert, wie Sie mytop installieren, konfigurieren und verwenden.

Voraussetzungen

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie Folgendes haben:

Schritt 1 - Mytop installieren

Lassen Sie uns die für mytop erforderlichen Pakete installieren.

Zuerst müssen wir das EPEL-Repository (Extra Packages for Enterprise Linux) auf dem Server installieren. EPEL ist eine Fedora Special Interest Group, die hochwertige Open-Source-Add-On-Softwarepakete für Enterprise Linux erstellt, verwaltet und verwaltet. Führen Sie den folgenden Befehl aus, um das EPEL-Repository auf Ihrem Server zu installieren und zu aktivieren:

Auf CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Auf CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Vergewissern Sie sich vor dem Fortfahren, dass das EPEL-Repo aktiviert ist, indem Sie Folgendes verwenden:

sudo yum repolist

Wenn aktiviert, sehen Sie das folgende Repo in der Ausgabe:

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

Als nächstes schützen wir die Basispakete mit dem yum-Plugin * protectbase * vor EPEL.

sudo yum install yum-plugin-protectbase.noarch -y

Der Zweck des * protectbase * -Plugins besteht darin, bestimmte YUM-Repositorys vor Updates aus anderen Repositorys zu schützen. Pakete in den geschützten Repositorys werden von Paketen in nicht geschützten Repositorys nicht aktualisiert oder überschrieben, selbst wenn das nicht geschützte Repository eine spätere Version aufweist.

Jetzt können wir das mytop-Paket installieren. Führen Sie den folgenden Befehl aus, um es zu installieren:

sudo yum install mytop -y

Dies installiert das mytop-Paket sowie alle Abhängigkeiten, hauptsächlich Perl-Module.

Schritt 2 - Konfigurieren von Mytop

Erstellen Sie vor der Verwendung von mytop eine angepasste Konfigurationsdatei für mytop mit dem Namen "+ .mytop +". Führen Sie den Befehl aus:

sudo nano /root/.mytop

und fügen Sie den folgenden Inhalt in die Datei ein und speichern und beenden Sie sie.

/root/.mytop

host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

Diese Konfigurationsdatei wird verwendet, wenn Sie mytop direkt als root ausführen und wenn Sie den Befehl + sudo + davor als Benutzer ohne Rootberechtigung ausführen.

Sie können Änderungen an dieser Konfigurationsdatei vornehmen, die Ihren Anforderungen entsprechen. Beispielsweise gibt die Option "+ Verzögerung " die Zeitspanne in Sekunden zwischen den Aktualisierungen der Anzeige an. Wenn Sie die mytop-Anzeige alle 3 Sekunden aktualisieren möchten, können Sie die Datei ` / root / .mytop +` mit bearbeiten

sudo nano /root/.mytop

und ändern Sie Folgendes:

/root/.mytop

delay=

Der Parameter + idle + gibt an, ob inaktive (schlafende) Threads in der Liste auf dem MyTop-Anzeigebildschirm angezeigt werden sollen. Standardmäßig werden inaktive Threads angezeigt. Wenn inaktive Threads weggelassen werden, wird die Standardsortierreihenfolge umgekehrt, sodass die am längsten laufenden Abfragen am oberen Rand der Liste angezeigt werden. Wenn Sie dies tun möchten, bearbeiten Sie die Datei + / root / .mytop + und ändern Sie Folgendes:

/root/.mytop

idle=

Auf den Manualpages von mytop finden Sie Informationen zu allen Parametern in der Konfigurationsdatei. Sie enthält eine Beschreibung der einzelnen Parameter. Verwenden Sie den folgenden Befehl, um auf die Handbuchseite zuzugreifen:

man mytop

Sie können + q + eingeben, um das Handbuch zu verlassen.

Schritt 3 - Verbindung zu Mytop herstellen

In diesem Abschnitt werden wir erläutern, wie Sie eine Verbindung zu mytop herstellen und es zum Anzeigen von MySQL-Abfragen verwenden.

Mytop benötigt Anmeldeinformationen für den Zugriff auf die Datenbank, die über eine Eingabeaufforderung, über die Befehlszeile oder in der Konfigurationsdatei gespeichert werden kann. Aus Sicherheitsgründen verwenden wir die Option "+ - prompt +" für "mytop", bei der Sie jedes Mal nach dem Kennwort gefragt werden. + Verbinden wir uns mit mytop über:

sudo mytop --prompt

und geben Sie das MySQL-Root-Passwort an der Eingabeaufforderung ein. Sie können auch mehrere Befehlszeilenargumente mit dem Befehl + mytop + verwenden. Die vollständige Liste finden Sie auf der Handbuchseite. Wenn Sie beispielsweise einen anderen mysql-Benutzer wie * sammy * verwenden möchten, um eine Verbindung zu mytop herzustellen, führen Sie den folgenden Befehl aus:

sudo mytop -u sammy --prompt

Mit dem folgenden Befehl können Sie nur eine bestimmte Datenbank verbinden und überwachen:

sudo mytop -d  --prompt

Um mytop zu beenden und zur Shell-Eingabeaufforderung zurückzukehren, geben Sie "+ q +" ein.

Schritt 4 - Anzeigen und Interpretieren des Mytop-Displays

In diesem Abschnitt erfahren Sie, wie Sie die MyTop-Anzeige und die verschiedenen Funktionen des Tools interpretieren.

Sobald wir mit + mytop --prompt + eine Verbindung zu mytop hergestellt haben, werden wir zur * Thread-Ansicht * weitergeleitet. Es zeigt etwas Ähnliches wie:

Output of mytopMySQL on localhost (5.5.41-MariaDB)                    up 0+00:05:52 [01:33:15]
Queries: 148  qps:    0 Slow:     0.0         Se/In/Up/De(%):    09/00/00/00
            qps now:    2 Slow qps: 0.0  Threads:    6 (   5/   0) 67/00/00/00
Key Efficiency: 2.0%  Bps in/out:  14.7/320.7k   Now in/out: 192.5/731.8k

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
       2      root       localhost      mysql         0  Query show full processlist
      16      root       localhost                    0  Sleep
      17      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      18      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      19      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      20      root       localhost     testdb         0  Query SELECT * FROM dept_emp

Sie können zu dieser Ansicht zurückkehren, wenn Sie sich in einer anderen Ansicht befinden, indem Sie "+ t +" eingeben.

Der obige Bildschirm ist in zwei Teile unterteilt. Die obersten vier Zeilen enthalten die * Kopfzeile *, die durch Drücken von * UMSCHALT-H * ein- oder ausgeschaltet werden kann. Der Header enthält zusammenfassende Informationen zu Ihrem MySQL-Server.

  • Die erste Zeile identifiziert den Hostnamen des Servers und die Version von MySQL, die er ausführt. Die rechte Seite zeigt die Betriebszeit des MySQL-Serverprozesses in Tagen + Stunden: Minuten: Sekunden sowie die aktuelle Uhrzeit.

  • In der zweiten Zeile wird die Gesamtzahl der vom Server verarbeiteten Abfragen (in unserem Fall 148), die durchschnittliche Anzahl der Abfragen pro Sekunde, die Anzahl der langsamen Abfragen und der Prozentsatz der Abfragen zum Auswählen, Einfügen, Aktualisieren und Löschen angezeigt.

  • In der dritten Zeile werden die Echtzeitwerte seit der letzten Aktualisierung von mytop angezeigt. Die normale Aktualisierungszeit (Verzögerung) für mytop beträgt 5 Sekunden. Wenn also 100 Abfragen in den letzten 5 Sekunden seit der Aktualisierung ausgeführt wurden, wäre die Zahl "+ qps now " 20. Das erste Feld gibt die Anzahl der Abfragen pro Sekunde an (` qps jetzt: 2 `). Der zweite Wert ist die Anzahl der langsamen Abfragen pro Sekunde. Das Segment " Threads: 6 (5/0) +" gibt an, dass insgesamt 6 verbundene Threads vorhanden sind, 5 aktiv sind (einer schläft) und sich 0 Threads im Thread-Cache befinden. Das letzte Feld in der dritten Zeile zeigt die Abfrageprozentsätze an, wie in der vorherigen Zeile, jedoch seit der letzten Aktualisierung von mytop.

  • Die vierte Zeile zeigt die Effizienz des Schlüsselpuffers (wie oft Schlüssel vom Puffer anstatt von der Festplatte gelesen werden) und die Anzahl der Bytes, die MySQL insgesamt und im letzten MyTop-Zyklus gesendet und empfangen hat. + Schlüsseleffizienz: 2,0% + zeigt an, dass 2% der Schlüssel aus dem Puffer und nicht von der Festplatte gelesen werden. + Bps in / out: 14.7 / 320.7k + zeigt, dass MySQL seit dem Start durchschnittlich 14.7kbps an eingehendem Verkehr und 320.7kbps an ausgehendem Verkehr hat. + Now in / out + zeigt den Verkehr wieder an, aber seit der letzten Aktualisierung von mytop.

Der zweite Teil der Anzeige listet aktuelle MySQL-Threads auf, sortiert nach ihrer Leerlaufzeit (am wenigsten Leerlauf zuerst). Sie können die Sortierreihenfolge umkehren, indem Sie bei Bedarf * O * drücken. Die Thread-ID, der Benutzername, der Host, von dem aus der Benutzer eine Verbindung herstellt, die Datenbank, mit der der Benutzer verbunden ist, die Anzahl der Sekunden der Leerlaufzeit, der Befehl, den der Thread ausführt (oder der Status des Threads), und der erste Teil der Abfrage Hier werden alle Informationen angezeigt. Wenn sich der Thread in einem * Query * -Status befindet (d. H. + Cmd + zeigt * Query *) an, dann zeigt die nächste Spalte + Query oder State + den ersten Teil der Abfrage, die gerade ausgeführt wird. Wenn der Befehlsstatus * Sleep * oder * Idle * ist, ist die Spalte + Query oder State + normalerweise leer. In der obigen Beispielausgabe ist Thread mit der ID * 2 * tatsächlich mytop und führt die Abfrage + show processlist + aus, um Informationen zu sammeln. Der Thread mit der ID * 16 * schläft (verarbeitet keine Abfrage, ist aber immer noch verbunden). Der Thread mit der ID * 17 * führt eine SELECT-Abfrage für die Datenbank * testdb * aus.

Nachdem wir die grundlegende Anzeige von mytop verstanden haben, werden wir sehen, wie Sie damit weitere Informationen zu den MySQL-Threads und -Abfragen sammeln können. Werfen wir einen Blick auf das folgende MyTop-Display:

[secondary_output Output of mytop]
MySQL on localhost (5.5.41-MariaDB)                    up 0+00:13:10 [23:54:45]
Queries: 2.8k   qps:    4 Slow:    51.0         Se/In/Up/De(%):    45/00/00/00
            qps now:   17 Slow qps: 0.0  Threads:   52 (  51/   0) 96/00/00/00
Key Efficiency: 100.0%  Bps in/out: 215.4/ 7.6M   Now in/out:  2.0k/16.2M

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
      34      root       localhost     testdb         0  Query show full processlist
    1241      root       localhost                    1  Sleep
    1242      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1243      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1244      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1245      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1246      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1247      root       localhost     testdb         1  Query SELECT * FROM dept_emp

In der oben gezeigten MyTop * Thread-Ansicht * (Standardansicht) werden die Abfragen abgeschnitten. Um die gesamte Abfrage anzuzeigen, können Sie * F * drücken, und es wird gefragt:

Full query for which thread id:

Geben Sie die Thread-ID für die Abfrage ein, die Sie anzeigen möchten. Geben Sie beispielsweise "+ 1244 +" ein. Dann wird folgendes angezeigt:

Thread 1244 was executing following query:

SELECT * FROM dept_emp WHERE ...

-- paused. press any key to resume or (e) to explain --

Wir können "+ e +" eingeben, um die Abfrage zu erklären. Dies erklärt die ausgeführte Abfrage, damit wir herausfinden können, ob die Abfrage optimiert ist. EXPLAIN ist eines der leistungsstärksten Tools zum Verstehen und Optimieren problematischer MySQL-Abfragen. Zum Beispiel:

EXPLAIN SELECT * FROM dept_emp:

*** row 1 ***
         table:  dept_emp
          type:  ALL
 possible_keys:  NULL
           key:  NULL
       key_len:  NULL
           ref:  NULL
          rows:  332289
         Extra:  NULL
-- paused. press any key to resume --

Sie können eine beliebige Taste drücken, um diesen Modus zu verlassen, oder "+ t +" eingeben, um zur Standard-Thread-Ansicht zurückzukehren.

Eine weitere nützliche Ansicht in mytop ist die Befehlsansicht. Um auf die Befehlsansicht zuzugreifen, geben Sie "+ c +" ein. Es sieht ungefähr so ​​aus:

          Command      Total  Pct  |  Last  Pct
          -------      -----  ---  |  ----  ---
           select       1782  55%  |   100   8%
      show status        723  22%  |   533  45%
 show processlist        708  22%  |   532  45%
        change db          2   0%  |     0   0%
   show variables          1   0%  |     0   0%
      Compression          0   0%  |     0   0%

Die Spalte "+ Befehl " zeigt den Typ des ausgeführten Befehls oder der ausgeführten Abfrage an. Die Spalte " Total " steht für die Gesamtzahl dieser Art von Befehlen, die seit dem Start des Servers ausgeführt wurden, und die Spalte " Pct " zeigt den gleichen Prozentsatz an. Auf der anderen Seite der vertikalen Linie befindet sich die Spalte " Last +", in der die Anzahl der Befehle angegeben ist, die seit der letzten Aktualisierung von mytop ausgeführt wurden. Diese Informationen geben uns einen Einblick in die kurz- und langfristigen Aktivitäten des MySQL-Servers.

In diesem Tutorial haben wir einige wichtige und nützliche Funktionen von mytop besprochen. Es gibt viele andere zur Verfügung. Um eine vollständige Liste der Optionen anzuzeigen, können Sie die Taste *? * Drücken, während mytop ausgeführt wird.

Fazit

Sie sollten nun wissen, wie Sie mit mytop Ihren MySQL-Server überwachen können. Es ist auch ein Ausgangspunkt, um problematische SQL-Abfragen zu finden und zu optimieren, wodurch die Gesamtleistung des Servers erhöht wird. Weitere Informationen zum Optimieren von MySQL-Abfragen und -Tabellen auf Ihrem Server finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-optimize-queries-and-tables-in-mysql-and-mariadb -on-a-vps [dieses Tutorial].