it-swarm.com.de

Wie kann man feststellen, warum ein MySQL-Server langsam geworden ist und Anfragen manchmal eine Zeitüberschreitung aufweisen?

Ich arbeite an meinem ersten Projekt, das eine MySQL-Datenbank stark nutzt, und habe Probleme, die Leistungsprobleme zu verstehen, die ich habe.

Meistens werden Antworten schnell vom Server zurückgegeben. Wenn jedoch bestimmte Skripte im Hintergrund viele Abfragen (sowohl Lesen als auch Schreiben von Daten) ausführen, stelle ich fest, dass andere Anfragen nur langsam Antworten erhalten. oder sind völlig abgelaufen.

Als beispielsweise gestern, als ein PHP -Skript, das viele Datenbankabfragen ausführt, ausgeführt wurde, Anfragen an den Server nach Seiten, die eine Reihe von Abfragen stellten, bevor eine Antwort zurückgegeben wurde, abgelaufen waren - konnte ich nicht Stellen Sie mit Navicat nicht einmal eine Verbindung zur Datenbank her, da das Zeitlimit ebenfalls abgelaufen ist.

Im obigen Beispiel habe ich top/htop in einer SSH-Konsole ausgeführt und festgestellt, dass die CPU-Auslastung sehr gering war und die Speicherauslastung nur bei etwa 50% lag. Aus diesem Grund liegt das Problem meiner Meinung nach in der Datenbank, aber ich habe Probleme zu verstehen, was die Probleme verursacht, z. B. ob sie auf Folgendes zurückzuführen sind:

  • Langsame Abfragen
  • Zu viele Verbindungen
  • Zu viele Abfragen pro Sekunde
  • Andere mögliche Probleme sind mir nicht bekannt

Ich kenne das langsame Abfrageprotokoll, aber keine meiner Abfragen ist sehr langsam.

Mit welchen Methoden oder Tools kann ich feststellen, warum eine MySQL-Datenbank langsam wird, manchmal sogar mit Zeitüberschreitung bei Anforderungen?

5
Nate

Sie müssen Ihre Datenbank optimieren. Dies ist ein komplizierter Prozess mit vielen Variablen und Entscheidungsbäumen. Ohne Einzelheiten können wir Sie hier nur wirklich zum Laufen bringen.

Wenn Sie ein Skript haben, das viel SQL ausführt und Ihre Datenbank verlangsamt, und Ihre CPU- und Speichernutzung während der Ausführung in Ordnung ist, treten wahrscheinlich E/A-Probleme auf. Sie hämmern die Scheibe. Sie müssen das im Skript verwendete SQL durchsuchen und optimieren. Beispielsweise werden möglicherweise viele vollständige Tabellenscans generiert oder zu viele Transaktionsprotokolle erstellt, die die Datenbank verlangsamen. Überprüfen Sie zunächst, ob unnötige vollständige Tabellenscans stattfinden, und prüfen Sie, ob Sie den relevanten Spalten Indizes hinzufügen können, um die E/A zu reduzieren. Dann melde dich zurück und wir können von dort aus gehen.

Das oben verlinkte MySQLtuner-Skript ist ausgezeichnet, aber das Verständnis der Ergebnisse kann für Sie eine Herausforderung sein, wenn Sie mit Datenbanken unerfahren sind. Lesen Sie die Haftungsausschlüsse auf der Hauptseite, bevor Sie beginnen: http://mysqltuner.com/

6
Andrew Brennan

Sie müssen die wahre Quelle Ihres Engpasses finden.

Speichernutzung nur bei 50%? Vielleicht geben Sie MySQL nicht genug Speicher. Probieren Sie das MySQLTuner Skript . Möglicherweise werden Sie darauf hingewiesen, was mit Ihrem Server nicht stimmt.

Überprüfen Sie, ob nur ein Kern verwendet wird und Sie viele Kerne haben. Dies kann zu dem falschen Eindruck führen, dass die CPU-Auslastung gering ist.

3
Jens W.

Um Ihnen bei der Diagnose des Problems zu helfen, verfügt Percona über die Percona-Toolkit-Sammlung , die kostenlos verwendet werden kann. Insbesondere möchten Sie möglicherweise pt-stalk verwenden, um Probleme zu diagnostizieren, mit denen Ihr Server konfrontiert ist. Mithilfe der von diesen Tools generierten Ausgabe können Sie bestimmen, was oder wie Ihr Server optimiert werden soll.

Sie haben auch Percona Cloud Tools , einen gehosteten Dienst, der Zugriff auf Einblicke in die Abfrageleistung für alle MySQL-Anwendungen bietet. Obwohl sich dieser Dienst in der Beta befindet, würde ich Ihnen empfehlen, ihn auszuprobieren.

2
jerichorivera

Haben Sie versucht, die MySQL-Tools http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html zu verwenden und einige der Optionen wie IO Lese-/Schreibvorgänge, Pufferlesevorgänge usw. Wenn Sie sagen, dass die Probleme beim Ausführen von Hintergrundprozessen auftreten, können Sie Puffer überprüfen oder die Möglichkeit von Dateisperren prüfen. Es ist schwierig zu beantworten, wenn man nicht weiß, was die Hintergrundaufgaben tun, und im Vergleich zu Aktualisierungen oder Löschungen direkt auswählt.

Sie erwähnen ein Skript, in dem viele Abfragen ausgeführt werden, die zu Zeitüberschreitungen führen. Öffnet und schließt dieses Skript Verbindungen ordnungsgemäß, hält es die Abfragen aufgeräumt, indem es einzeln ausgeführt wird, oder führen Sie mehrere Schleifen aus? Nur weil der Speicher/Prozessor nicht funktioniert, bedeutet dies nicht, dass dem PHP nicht der Speicher sowie die Anwendung, MySQL oder Ihr Webserver ausgehen.

Versuchen Sie es einfach nacheinander, bis Sie schnellere Vorgänge erhalten, und implementieren Sie dann alle Änderungen in Ihrer gesamten Arbeit.

2
EJW

Durch meine Erfahrung,

-Sie können versuchen, ein einfaches Skript zu erstellen. Wenn Ihr Skript (PHP) das Problem lösen kann, verwenden Sie dazu keine Datenbank.

- Nicht zu viele erstellen Prozeduren auf Ihrem MySQL. Weil es die Leistung verringern kann.

SO können Sie versuchen.

1
Uchsun