Ich entwickle eine große Web-App und möchte, dass sie sich abhängig von einem Faktor ändert, der sich auf den Stress bezieht, unter dem die Datenbank derzeit steht.
Ich bin mir nicht sicher, was würde ich am genauesten / effektivsten / am einfachsten finden. Ich überlege mir vielleicht die Anzahl der aktuellen Verbindungen oder Server-Reaktionszeit oder CPU-Auslastung?
Was wäre am besten geeignet und möglich?
Danke
Interessante Frage. Was Sie wirklich wollen, ist eine Möglichkeit für PHP, dem mySQL-Server zwei Fragen zu stellen:
Server, verwenden Sie fast Ihre gesamte CPU-Kapazität?
Server, verwenden Sie fast die gesamte IO-Kapazität Ihrer Festplatte?
Basierend auf den Antworten, nehme ich an, dass Sie die Arbeit Ihrer PHP-Webanwendung vereinfachen möchten ... vielleicht indem Sie irgendeine Art von Suchfunktion ausschalten oder einige Daten aggressiver zwischenspeichern.
Wenn Sie eine Shell auf Ihrem (linux oder bsd) mysql Server haben, können Ihre beiden Fragen beantwortet werden, indem Sie die Ausgabe dieser beiden Befehle beobachten.
%Vor%Aber es gibt keine süße kleine Abfrage, die diese Daten aus mySQL in Ihre App holt.
Bearbeiten: Eine Möglichkeit ist es, ein kleines PERL-Hack oder ein anderes einfaches Programm zu schreiben, das auf Ihrem Server läuft, sich mit der lokalen Datenbank verbindet und einmal pro Minute (einmal pro Minute)% idle und% util bestimmt, und aktualisiert eine kleine Ein-Zeilen-Tabelle in Ihrer Datenbank. Sie könnten, ohne zu viel Mühe, auch Sachen wie, wie voll Ihre Festplatten, zu diesem Tisch hinzufügen, wenn Sie sich interessieren. Dann kann Ihre PHP-App diese Tabelle abfragen. Dies ist eine ideale Verwendung der MEMORY-Zugriffsmethode. Halten Sie es auf jeden Fall einfach: Sie möchten nicht, dass Ihre Überwachung Ihren Server belastet.
Ein zweitbester Trick, den Sie von Ihrem Kunden tun können.
Geben Sie den Befehl SHOW PROCESSLIST FULL aus, zählen Sie die Anzahl der Zeilen (mySQL-Prozesse), für die der Befehl "Query" lautet, und wenn Sie viele davon haben, betrachten Sie diese als hohe Arbeitslast.
Sie können auch die Zeitwerte für die Prozesse mit dem Status Query addieren und einen hohen Wert dieser Zeit als Schwellenwert verwenden.
BEARBEITEN: Wenn Sie auf einem mySQL 5-Server arbeiten und Ihr Server-Account Zugriff auf das von mySql bereitgestellte information_schema hat, können Sie eine Abfrage direkt verwenden, um die genannten Prozessdaten zu erhalten:
%Vor%COUNT (*) - 1: weil die obige Abfrage selbst als Abfrage zählt.
Sie müssen sich mit den Schwellenwerten herumschlagen, um dies in der Produktion richtig zu machen.
Es ist eine gute Idee, dass Ihre PHP-Web-Anwendung belastet wird, wenn der Datenbankserver nicht mithalten kann. Eine bessere Idee ist jedoch, Ihre lang laufenden Abfragen zu identifizieren und zu optimieren.
Die Menge an "Stress", unter der die Datenbank steht, ist keine sehr reale Metrik. Es ist wichtig zu ermitteln, wie skalierbar die Anwendung ist und in welchem Umfang die Datenbank zu inakzeptabler Leistung beiträgt. Das hört sich nach einem kleinen Ausbruch an, aber es macht keinen Sinn, Zeit und Mühe auf etwas zu verwenden, ohne ein klares Ziel zu haben, was Sie erreichen wollen.
Wichtig ist, dass Sie in Ihren Webserver-Protokollen die Reaktionszeit auf Mikrosekundenebene aufzeichnen und die langsame Abfrageprotokollierung in mysql aktivieren. Testen Sie dann Ihr DBMS, um zu sehen, was langsam ist, was langsam ist UND oft getroffen wird und was sich verlangsamt, wenn die Nachfrage steigt.
Sicherlich, wenn Sie Leistungsprobleme haben, dann sollten Sie auf alle Fälle CPU, Speichernutzung und I / O betrachten, aber dies sind in erster Linie Symptome eines Leistungsproblems - keine wahren Indikatoren. Sie könnten 10% CPU-Auslastung haben und Ihr System könnte laufen wie ein Hund oder 95% Nutzung und läuft wie ein Windhund;).
Systemlast (dh die durchschnittliche Länge der Ausführungswarteschlange ist ein besserer Indikator als die CPU - aber immer noch ein Symptomproblem. Im Allgemeinen betrifft die Datenbankbezogene Langsamkeit in erster Linie I / O-Probleme und wird normalerweise durch SQL-Optimierung gelöst. p>
C.
Tags und Links optimization php mysql performance