2008-09-18 23 views

Antwort

18

Ich empfehle diese drei Linien

 
log_slow_queries 
set-variable = long_query_time=1 
log-queries-not-using-indexes 

Die erste und zweite jede Abfrage über einen zweiten einzuloggen wird. Wie andere darauf hingewiesen haben, ist eine Abfrage von einer Sekunde ziemlich weit weg, wenn Sie für eine hohe Transaktionsrate auf Ihrer Website fotografieren, aber ich stelle fest, dass es einige echte WTFs gibt; Abfragen, die sollte schnell sein, aber für welche Kombination von Daten wurde es gegen ausgeführt wurde nicht.

Die letzte wird jede Abfrage protokollieren, die keinen Index verwendet. Wenn Sie keine gemeinsame Abfrage durchführen, sollten Sie den besten Index finden, den Sie finden können. Achten Sie also auf die Ausgabe.

Obwohl die sicherlich nicht für die Produktion, diese letzte Option

 
log = /var/log/mysql/mysql.log 

werden alle Anfragen einzuloggen, die nützlich sein können, wenn Sie tune eine bestimmte Seite oder Aktion versuchen.

+0

Wusste nicht über die Log-Abfragen-nicht-Verwendung-Indizes, danke! – Subimage

4

Egal, welche Zeit/Sie/Gefühl ist inakzeptabel langsam für eine Abfrage auf Ihren Systemen.

Es hängt von der Art der Abfragen ab, die Sie ausführen, und von der Art des Systems. Eine Abfrage, die mehrere Sekunden dauert, spielt keine Rolle, wenn es sich um ein Back-End-Berichterstellungssystem handelt, das komplexe Data-Mining-Vorgänge usw. durchführt. Eine Verzögerung spielt keine Rolle, kann jedoch bei einem System mit Benutzerkontakt völlig inakzeptabel sein.

3

Setzen Sie es auf was auch immer Sie mögen. Das einzige Problem ist, dass es in einem Aktien-MySQL nur in Schritten von 1 Sekunde gesetzt werden kann, was für manche Leute zu langsam ist.

Die am häufigsten verwendeten Produktionsserver führen viel zu viele Abfragen aus, um alle zu protokollieren. Das langsame Protokoll ist eine Möglichkeit, das Protokoll zu filtern, so dass wir diejenigen sehen können, die eine lange Zeit benötigen (die meisten Abfragen werden wahrscheinlich fast sofort ausgeführt). Es ist ein bisschen ein stumpfes Instrument.

Setzen Sie es auf 1 Sekunde, wenn Sie möchten, werden Sie wahrscheinlich nicht den Speicherplatz auslassen oder ein Leistungsproblem erstellen, indem Sie das tun.

Es geht wirklich um das Risiko, das langsame Protokoll zu aktivieren - tun Sie es nicht, wenn Sie das Gefühl haben, dass es weitere Disk- oder Leistungsprobleme verursacht.

Natürlich könnten Sie die langsame Anmeldung auf einem Nicht-Produktionsserver aktivieren und simulierte Last durchstellen, aber das ist nie ganz dasselbe.

+0

Sie können es jetzt auf Mikrosekunden einstellen. – phirschybar

1

Nicht nur in Bezug auf die Auflösung ist es ein stumpfes Instrument, sondern es ist auch MySQL-Instanz-weit, so dass Sie, wenn Sie unterschiedliche Datenbanken mit unterschiedlichen Leistungsanforderungen haben, kein Glück haben. Offensichtlich gibt es Möglichkeiten, aber es ist wichtig, dies bei der Einstellung der langsamen Protokollierung zu berücksichtigen.

Abgesehen von den Leistungsanforderungen Ihrer Anwendung ist ein weiterer zu berücksichtigender Faktor das, was Sie zu protokollieren versuchen. Verwenden Sie das Protokoll, um Abfragen abzufangen, die die Stabilität Ihrer Datenbankinstanz bedrohen (beispielsweise solche, die Deadlocks oder kartesische Joins verursachen) oder Abfragen, die sich auf die Leistung bestimmter Benutzer auswirken und eine Feinabstimmung erfordern könnten? Das beeinflusst, wo Sie Ihren Schwellenwert festlegen.

3

Peter Zaitsev hat eine nice article über die Verwendung des langsamen Abfrageprotokolls geschrieben.Eine Sache, die er bemerkt, ist wichtig, auch zu berücksichtigen, wie oft eine bestimmte Abfrage verwendet wird. Berichte, die einmal am Tag laufen, sind nicht wichtig, um schnell zu sein. Aber etwas, das sehr oft läuft, könnte ein Problem sein, selbst wenn es eine halbe Sekunde dauert. Und das kann man ohne den Microslow-Patch nicht feststellen.