
Ich versuche, einen MySQL-/Webserver-Engpass zu ermitteln.
Ich habe drei Server. Einen Webserver, auf dem Nginx läuft, einen Remote-MySQL-Server mit meiner Wordpress-Datenbank und einen weiteren Remote-MySQL-Server, auf dem unsere Daten gespeichert sind.
Der Engpass, den ich zu finden versuche, liegt zwischen meinem zweiten MySQL-Server, auf dem unsere Daten gespeichert sind, und meinem Webserver. Wir haben eine Seite mit drei DataTables (drei separate Abfragen). Sie wird sehr langsam geladen, wenn sie alle lädt. Gelegentlich erhalte ich einen Gateway-Timeout-Fehler.
Ich glaube nicht, dass die Abfragen selbst das Problem sind. Bei DataGrip dauern alle drei durchschnittlich zwischen 200 und 500 ms. Derzeit werden die Abfragen nicht indiziert, da mir gesagt wurde, dass das Plugin Indizes nicht nutzen kann, aber ich werde es vielleicht trotzdem versuchen.
Hardware und Setup:
Mein MySQL-Server ist ein AWS R6G.Large, 2 Kerne und 16 GB RAM, SSD mit 150 IOPS und 128 MB Durchsatz. innodb_page_size ist 32, buffer_pool_size ist 11000M, innodb_buffer_pool_instances ist 10 und innodb_log_file_size ist 1G. Der Webserver ist ein AWS C6G.Xlarge, 4 Kerne und 8 GB RAM, SSD mit 150 IOPS und 128 MB Durchsatz. Verwendet FPM und Opcache.
Ich habe versucht, auf beiden Servern die Überwachung mit TOP durchzuführen, bin mir aber ehrlich gesagt nicht sicher, ob ich über das nötige Wissen verfüge, um die Informationen richtig zu nutzen.
Ich würde wirklich gerne irgendwie feststellen, ob es an der Hardware oder der Software liegt, und wenn es an der Hardware liegt, gibt es eine Möglichkeit, das Problem zu isolieren? Ich habe kein Problem damit, die Hardware zu erweitern, wenn das tatsächlich das Problem ist.
Ich bin nicht sicher, ob dies bei Stack/ServerFault zulässig ist, aber ich denke, es könnte einfacher sein, herauszufinden, was vor sich geht, wenn ich meinen Bildschirm aufzeichne, während TOP auf beiden Servern läuft. Ich habe meinem öffentlichen Google Drive ein Video hinzugefügt. Das Video enthält sowohl meinen MySQL-Server (oben) als auch meinen Webserver (Nginx, unten). Ich habe die Seite geladen (3-Sekunden-Marke im Video) und das Ergebnis aufgezeichnet. Das Video ist 1:05, also die Zeit, die es gedauert hat, bis die letzte Tabelle angezeigt wurde. Das Video wurde aufgezeichnet, während meine Site gewartet wurde, sodass keine andere IP/kein anderer Datenverkehr einen der Server erreichen konnte.
Mein Google Drive-Link:
https://drive.google.com/drive/folders/1NtdE1Z4875i1Xx2Wy2EXGgknt9yuY1IN?usp=sharing
Hoffentlich kann jemand helfen.
Aimé