Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Leistung:Identifizieren langer Abfragen

Jede MySQL-gestützte Anwendung kann von einem fein abgestimmten Datenbankserver profitieren. Das Liquid Web Heroic Support-Team ist im Laufe der Jahre auf zahlreiche Situationen gestoßen, in denen einige geringfügige Anpassungen einen großen Unterschied in der Website- und Anwendungsleistung gemacht haben. In dieser Artikelserie haben wir einige der häufigeren Empfehlungen skizziert, die sich am stärksten auf die Leistung ausgewirkt haben.

Preflight-Check

Dieser Artikel gilt für die meisten Linux-basierten MySQL VPS-Server. Dies umfasst unter anderem traditionelle dedizierte und Cloud-VPS-Server, auf denen eine Vielzahl gängiger Linux-Distributionen ausgeführt wird. Der Artikel kann mit den folgenden Liquid Web Systemtypen verwendet werden:

  • Core-verwaltetes CentOS 6x/7x
  • Core-verwaltetes Ubuntu 14.04/16.04
  • Vollständig verwaltetes CentOS 6/7 cPanel
  • Vollständig verwaltetes CentOS 7 Plesk Onyx 17
  • Selbstverwaltete Linux-Server
Hinweis Selbstverwaltete Systeme, die sich gegen den direkten Support entschieden haben, können die hier besprochenen Techniken nutzen, das Liquid Web Heroic Support-Team kann jedoch keine direkte Hilfe für diese Servertypen anbieten.

Diese Artikelserie setzt voraus, dass Sie mit den folgenden grundlegenden Systemverwaltungskonzepten vertraut sind:

  • SSH-Verbindungen und grundlegende Navigation der standardmäßigen Linux-Befehlszeilen-Shell-Umgebung.
  • Öffnen, Bearbeiten und Speichern von Dateien in Vim oder einem ausgewählten System-Editor.
  • Interaktiver MySQL-Modus und allgemeine MySQL-Abfragesyntax.

Was ist MySQL-Optimierung?

Für den Begriff MySQL-Optimierung gibt es keine klar definierte Definition. Je nach Person, Administrator, Gruppe oder Unternehmen kann es etwas anderes bedeuten. Für diese Artikelserie zur MySQL-Optimierung definieren wir MySQL-Optimierung als: Die Konfiguration eines MySQL- oder MariaDB-Servers, der so konfiguriert wurde, dass häufig auftretende Engpässe vermieden werden, die in dieser Artikelserie besprochen werden.

Was ist ein Engpass?

Ähnlich wie der Hals einer Limonadenflasche ist ein Engpass als Fachbegriff ein Punkt in einer Anwendung oder Serverkonfiguration, an dem eine geringe Menge an Verkehr oder Daten ohne Probleme passieren kann. Ein größeres Volumen der gleichen Art von Datenverkehr oder Daten wird jedoch behindert oder blockiert und kann so nicht erfolgreich betrieben werden. Sehen Sie sich das folgende Beispiel eines Konfigurationsengpasses an:

In diesem Beispiel kann der Server 10 Verbindungen gleichzeitig verarbeiten. Die Konfiguration akzeptiert jedoch nur 5 Verbindungen. Dieses Problem trat nicht auf, solange 5 oder weniger Verbindungen gleichzeitig bestanden. Wenn der Datenverkehr jedoch auf 10 Verbindungen ansteigt, beginnt die Hälfte davon aufgrund ungenutzter Ressourcen in der Serverkonfiguration fehlzuschlagen. Die obigen Beispiele veranschaulichen die Engpassform, von der sie ihren Namen ableitet, im Vergleich zu einer optimierten Konfiguration, die den Engpass korrigiert.

Wann sollte ich meine MySQL-Datenbank optimieren?

Im Idealfall sollte die Optimierung der Datenbankleistung regelmäßig und vor Beeinträchtigung der Produktivität erfolgen. Es hat sich bewährt, wöchentliche oder monatliche Audits der Datenbankleistung durchzuführen, um zu verhindern, dass Probleme sich negativ auf Anwendungen auswirken. Die offensichtlichsten Symptome von Leistungsproblemen sind:

  • Abfragen stapeln sich und werden in der MySQL-Prozesstabelle nie abgeschlossen.
  • Anwendungen oder Websites, die die Datenbank verwenden, werden langsam.
  • Verbindungszeitüberschreitungen, insbesondere während der Spitzenzeiten.

Es ist zwar normal, dass auf einem ausgelasteten System mehrere Abfragen gleichzeitig ausgeführt werden, es wird jedoch zu einem Problem, wenn diese Abfragen zu lange dauern, bis sie regelmäßig abgeschlossen werden. Obwohl der spezifische Schwellenwert je nach System und Anwendung unterschiedlich ist, manifestieren sich durchschnittliche Abfragezeiten von mehreren Sekunden als Verlangsamung innerhalb der angeschlossenen Websites und Anwendungen. Diese Verlangsamungen können manchmal klein anfangen und unbemerkt bleiben, bis ein großer Verkehrsanstieg auf einen bestimmten Engpass trifft.

Identifizieren von Leistungsproblemen

Zu wissen, wie die MySQL-Prozesstabelle untersucht wird, ist für die Diagnose des spezifischen Engpasses, auf den man stößt, von entscheidender Bedeutung. Abhängig von Ihrem speziellen Server und Ihren Vorlieben gibt es eine Reihe von Möglichkeiten, die Prozesstabelle anzuzeigen. Der Kürze halber konzentriert sich diese Serie auf die gängigsten Methoden, die über Secure Shell (SSH)-Zugriff verwendet werden:

Methode 1. Verwenden der MySQL-Prozesstabelle

Verwenden Sie die Datei „mysqladmin ’ Kommandozeilentool mit dem Flag ‘processlist “ oder „proc ’ kurz. (Hinzufügen des Flags „Statistiken “ oder „Statistik ’ zeigt laufende Statistiken für Abfragen seit dem letzten Neustart von MySQL.)

Befehl:

mysqladmin proc stat

Ausgabe:

 +-------+------+-----------+-----------+---------+------+-------+
 | Id    | User | Host      | db        | Command | Time | State | Info               | Progress |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 | 77255 | root | localhost | employees | Query   | 150  |       | call While_Loop2() | 0.000    |
 | 77285 | root | localhost |           | Query   | 0    | init  | show processlist   | 0.000    |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 Uptime: 861755  Threads: 2  Questions: 20961045  Slow queries: 0  Opens: 2976  Flush tables: 1  Open tables: 1011  Queries per second avg: 24.323
Hinweis:Pro :Wird auf der Shell-Schnittstelle verwendet und vereinfacht die Weiterleitung der Ausgabe an andere Skripte und Tools.Con :Die Info-Spalte der Prozesstabelle wird immer abgeschnitten, sodass bei längeren Abfragen nicht die vollständige Abfrage bereitgestellt wird

Methode 2:Verwenden der MySQL-Prozesstabelle

Führen Sie die Abfrage „show processlist;“ in der Eingabeaufforderung des interaktiven MySQL-Modus aus. (Hinzufügen des „ voll ’  Modifikator des Befehls deaktiviert das Abschneiden von Informationen Spalte. Dies ist erforderlich, wenn lange Abfragen angezeigt werden.)

Befehl:

show processlist;

Ausgabe:

MariaDB [(none)]> show full processlist;
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | Id    | User | Host      | db        | Command | Time | State | Info                  | Progress |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | 77006 | root | localhost | employees | Query   |  151 | NULL  | call While_Loop2()    |    0.000 |
 | 77021 | root | localhost | NULL      | Query   |    0 | init  | show full processlist |    0.000 |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
Profi :Die Verwendung des vollständigen Modifikators ermöglicht es, bei längeren Abfragen die vollständige Abfrage anzuzeigen.Con :Der interaktive MySQL-Modus kann nicht auf Skripte und Tools zugreifen, die in der Shell-Oberfläche verfügbar sind.

Das Protokoll für langsame Abfragen verwenden

Ein weiteres wertvolles Tool in MySQL ist die integrierte Funktion zur Protokollierung langsamer Abfragen. Diese Funktion ist die bevorzugte Methode, um regelmäßig lang andauernde Abfragen zu finden. Es stehen mehrere Direktiven zur Verfügung, um diese Funktion anzupassen. Die am häufigsten benötigten Einstellungen sind jedoch:

slow_query_log Aktivieren/Deaktivieren Sie das Protokoll für langsame Abfragen
slow_query_log_file Name und Pfad der Protokolldatei für langsame Abfragen
long_query_time Zeit in Sekunden/Mikrosekunden, die eine langsame Abfrage definiert

Diese Anweisungen werden im Abschnitt [mysqld] der MySQL-Konfigurationsdatei unter /etc/my.cnf festgelegt und erfordern einen Neustart des MySQL-Dienstes, bevor sie wirksam werden. Siehe folgendes Beispiel zur Formatierung:

Warnung:Es besteht ein großes Problem mit dem Speicherplatz in Bezug auf die Protokolldatei für langsame Abfragen, die kontinuierlich überwacht werden muss, bis die Protokollfunktion für langsame Abfragen deaktiviert wird. Denken Sie daran, je niedriger Ihre long_query_time-Anweisung, desto schneller füllt das langsame Abfrageprotokoll eine Festplattenpartition
[mysqld]
 log-error=/var/lib/mysql/mysql.err
 innodb_file_per_table=1
 default-storage-engine=innodb
 innodb_buffer_pool_size=128M
 innodb_log_file_size=128M
 max_connections=300
 key_buffer_size = 8M
 slow_query_log=1
 slow_query_log_file=/var/lib/mysql/slowquery.log
 long_query_time=5

Sobald das Protokoll für langsame Abfragen aktiviert ist, müssen Sie es regelmäßig nachverfolgen, um widerspenstige Abfragen zu überprüfen, die für eine bessere Leistung angepasst werden müssen. Um die Protokolldatei für langsame Abfragen zu analysieren, können Sie sie direkt parsen, um ihren Inhalt zu überprüfen. Das folgende Beispiel zeigt die Statistiken für die Beispielabfrage, die länger als die konfigurierten 5 Sekunden lief:

AchtungDurch die Aktivierung der Protokollfunktion für langsame Abfragen wird die Leistung beeinträchtigt. Dies ist auf die zusätzlichen Routinen zurückzuführen, die zum Analysieren jeder Abfrage erforderlich sind, sowie auf die E/A, die zum Schreiben der erforderlichen Abfragen in die Protokolldatei erforderlich sind. Aus diesem Grund gilt es auf Produktionssystemen als bewährte Methode, das Protokoll für langsame Abfragen zu deaktivieren. Das Protokoll für langsame Abfragen sollte nur für eine bestimmte Dauer aktiviert bleiben, wenn aktiv nach problematischen Abfragen gesucht wird, die sich auf die Anwendung oder Website auswirken können.
# Time: 180717  0:23:28
 # User@Host: root[root] @ localhost []
 # Thread_id: 32  Schema: employees  QC_hit: No
 # Query_time: 627.163085  Lock_time: 0.000021  Rows_sent: 0  Rows_examined: 0
 # Rows_affected: 0
 use employees;
 SET timestamp=1531801408;
 call While_Loop2();

Optional können Sie das mysqldumpslow-Befehlszeilentool verwenden, das die Protokolldatei für langsame Abfragen parst und ähnliche Abfragen zusammenfasst, mit Ausnahme von Zahlen- und Zeichenfolgendaten:

~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log
 Reading mysql slow query log from /var/lib/mysql/slowquery.log
 Count: 2  Time=316.67s (633s)  Lock=0.00s (0s)  Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
 call While_Loop2()

(Informationen zur Verwendung finden Sie hier in der MySQL-Dokumentation – mysqldumpslow – Logdateien für langsame Abfragen zusammenfassen)

Schlussfolgerung

Damit endet der erste Teil unserer Serie zur Datenbankoptimierung und gibt uns eine solide Basis, auf die wir uns für Benchmark-Zwecke beziehen können. Obwohl Datenbankprobleme kompliziert sein können, werden diese Konzepte in unserer Serie aufgeschlüsselt, um Mittel zur Optimierung Ihrer Datenbank durch Datenbankkonvertierung, Tabellenkonvertierung und Indizierung bereitzustellen.

Wie können wir helfen?

Wir sind stolz darauf, The Most Helpful Humans In Hosting™ zu sein!

Unsere Support-Teams bestehen aus erfahrenen Linux-Technikern und talentierten Systemadministratoren, die über fundierte Kenntnisse mehrerer Webhosting-Technologien verfügen, insbesondere der in diesem Artikel besprochenen.

Sollten Sie Fragen zu diesen Informationen haben, stehen wir Ihnen jederzeit rund um die Uhr, 7 Tage die Woche, 365 Tage im Jahr zur Verfügung.

Wenn Sie ein vollständig verwalteter VPS-Server, dedizierter Cloud-Server, eine private VMWare-Cloud, ein privater übergeordneter Server, verwaltete Cloud-Server oder ein Eigentümer eines dedizierten Servers sind und Sie sich unwohl fühlen, einen der beschriebenen Schritte auszuführen, werden wir ist telefonisch erreichbar unter @800.580.4985, per Chat oder Support-Ticket, um Sie bei diesem Vorgang zu unterstützen.

SeriennavigationNächster Artikel>>