Empfohlene MySQL-Statistiken für die Produktionsumgebung

7

Abgesehen von den üblichen Systemstatistiken (E / A, RAM-Nutzung, CPU, Last usw.) sammle ich derzeit Fragen, QPS, laufende Abfragen und Pufferpool-Treffer.

Ich finde es qpsziemlich nutzlos, da die Verfügbarkeit unserer Produktionsserver sehr hoch ist und der Durchschnittswert.

Ich habe mich über Best Practices für die Statistiksammlung für den MySQL-Produktionsserver gewundert. Welche anderen Statistiken sollte ich sammeln / überwachen, um die Belastung meines Servers zu verstehen und schnell zu handeln, ohne ihn stärker zu belasten?

Bearbeiten:

Ich bin nicht auf der Suche nach einer Lösung von Drittanbietern. Ich verwende bereits zabbix (und die Möglichkeit, handgeschriebene Skripte zu erstellen), um Statistiken zu sammeln / unseren MySQL-Cluster zu überwachen. Unter diesem Link finden Sie eine Liste möglicher Statistiken zur Sammlung . Und natürlich gibt es Statistiken, die hier nicht aufgeführt sind und über Shell-Skripte gesammelt werden können. Die eigentliche Frage ist , was Statistiken müssen unsere Cluster gesammelt werden effizient zu überwachen , ohne eine unnötige Junk volle Statistiken zu erstellen.

Beispiel: Qcache_hit / Qcache_hit + queriesSollten wir ein Verhältnis erhalten, um zu sehen, ob unsere Tische heiß genug sind?

gebrechlich
quelle
Warum probierst du keine Tools wie Zabbix oder Cacti aus? Benötigen Sie mehr realtimeWerkzeug anstelle dieser Werkzeuge?
Ich verwende bereits zabbix, aber ich möchte die "Best Practices" für das Sammeln von Statistiken. Ich möchte nicht zu viele Statistiken sammeln, nur die notwendigsten, wenn möglich. Deshalb brauche ich "Best Practices".
Gebrechliche
Sie haben Recht, ich habe es als nicht thematisch gekennzeichnet.
gebrechlich

Antworten:

3

Überwachen Sie alles, was Sie können, so oft Sie können. Ich empfehle Graphite w / statsd als zentralen Ort, um alle Ihre Metriken zu sammeln. Es bietet ein sehr einfaches Klartextprotokoll, das es einfach macht, nahezu alle Metrikdaten zu protokollieren, und eine Benutzeroberfläche, die es unglaublich einfach macht, eine Metrik mit einer anderen zu vergleichen. Auf meinen Systemen sammle ich eine Menge Informationen und die meisten davon haben sich irgendwann als von unschätzbarem Wert erwiesen. Hier sind einige davon:

Ich habe einen Daemon namens mysampler geschrieben , der die Ausgabe von SHOW GLOBAL STATUSin regelmäßigen Abständen an Graphit (oder CSV, wenn Sie möchten) sendet . Wir protokollieren dies in Intervallen von 5 Sekunden, aber es gibt Zeiten, in denen ich wünschte, wir hätten es auf Intervalle von 1 Sekunden eingestellt. Auf dieser Granularitätsebene sehen Sie einige sehr interessante Muster. Es ist bekannt, welche Statistiken Zähler und welche absolute Werte sind (Fragen sind ein Zähler, Threads_running ist ein absoluter Wert) und gibt die Deltas für die Zähler aus.

ab-tblstats2g wird jede Nacht von cron ausgeführt und sendet Statistiken zur Tabellengröße an Graphit, damit wir das Tabellenwachstum verfolgen können. Ich plane, es in naher Zukunft um den maximalen Primärschlüsselwert und die Anzahl der Zeilen (aus Tabellenstatistiken) zu erweitern. Es funktioniert auch mit MSSQL Server.

mysql_logger protokolliert die Ausgabe von SHOW FULL PROCESSLIST alle X Zeitintervalle in syslog. Es ist trivial, genau herauszufinden, was gleichzeitig lief, wenn etwas komisch wird (Tabellensperren, lange laufende Abfragen usw.). Wir speichern diese Daten zur einfachen Suche in Splunk , aber manchmal verwende ich immer noch grep in den Syslog-Protokollen.

pt-stalk aus dem Percona Toolkit eignet sich hervorragend für "Was ist gerade passiert?" Szenarien. Es überwacht Serverstatusvariablen, um einen bestimmten Wert zu überschreiten ( Threads_connectedstandardmäßig> 25, ist aber Threads_runningmeiner Erfahrung nach normalerweise eine wertvollere Metrik) und sammelt beim Auslösen eine Reihe von Daten über MySQL und das System, die mit pt-sift überprüft werden können oder indem Sie einfach die generierten Dateien überprüfen. Es werden sogar tcpdumps-, gdb-, oprofile- und strace-Spuren generiert.

Das ist im Grunde das, was wir überwachen , was sich von der Alarmierung unterscheidet. Für die Alarmierung empfehle ich Ihnen, auf eine sehr kleine Anzahl von Metriken aufmerksam zu machen. Sie können 90% der Fälle abdecken, indem Sie einfach eine Workload-repräsentative Abfrage auswählen und einen Schwellenwert für die Rückgabezeit festlegen. Wenn dieser Schwellenwert überschritten wird, ist ein Problem aufgetreten. Ansonsten geht es dir gut. Sie müssen nicht überprüfen, ob der Prozess ausgeführt wird oder ähnliches. Andere Dinge, nach denen gesucht werden muss, sind Einträge im MySQL-Fehlerprotokoll, die sich zu vielen Verbindungen nähern, und die Funktionsweise der Replikation (Slave-Verzögerung, Slave-Ausführung, synchronisierte Tabellen). Trefferquoten sind für Alarmierungszwecke völlig nutzlos - alles, was zählt, ist, dass Anfragen innerhalb eines bestimmten Zeitraums zurückkehren.

Für die weitere Lektüre ist das Whitepaper zur Verhinderung von MySQL-Notfällen durch die Percona-Leute eine gute Lektüre, die ausführlich beschreibt, worauf zu überwachen und zu warnen ist. Percona hat auch eine Reihe von Nagios-Plugins veröffentlicht (die meiner Meinung nach mit Zabbix funktionieren sollten), die Sie verwenden können.

Aaron Brown
quelle
3

Ich würde die Verwendung von MONyog sehr empfehlen . Geben Sie hier die Bildbeschreibung ein

MONyog MySQL Monitor and Advisor ist ein "MySQL-DBA in einer Box", mit dem MySQL-DBAs mehr MySQL-Server verwalten, ihre aktuellen MySQL-Server optimieren und Probleme mit ihren MySQL-Datenbankanwendungen finden und beheben können, bevor sie zu ernsthaften Problemen oder kostspieligen Ausfällen werden können.

Unser DevOps-Team nutzt dies ausgiebig für Produktion und Entwicklung. Diese Leute haben die meisten "Best Practices" in die Anwendung integriert, sodass wir uns im DBA-Bereich nicht zu sehr die Hände schmutzig machen müssen.

Hafichuk
quelle
Vielen Dank für die schnelle Antwort, aber wir verwenden zabbix bereits für die Überwachung. Ich muss nur wissen, welche Statistiken für die MySQL-Überwachung "Muss" sind.
Gebrechliche
1

Langsame Abfragen müssen auf jeden Fall überwacht werden.

Sie finden alles nützlich über Slow Query Log finden hier .

Und Sie können froh sein zu wissen, dass wir auf unserem Produktionsserver nicht mehr überwachen als das, was Sie bereits tun.


quelle
Vielen Dank für die freundliche Erinnerung, wir überprüfen immer unsere langsamen Abfrageprotokolle. Ich werde auch hinzufügen , Slow queriesin mysqladmin statusmeiner Monitorliste. Ich werde die Frage auch bearbeiten, um sie klarer zu machen.
Gebrechliche
Oh ok, ich habe es nicht in Ihrer Liste gesehen: p
0

Bei meinen Recherchen habe ich festgestellt, dass das Ganglien-Plugin ( gmetric-mysql.sh ) nur die folgenden Statistiken sammelt:

Connections
Com_update
Com_select
Com_insert
Com_delete
Created_tmp_tables
Slow_queries
Qcache_hits
Qcache_queries_in_cache
Questions
Threads_connected
Threads_running
gebrechlich
quelle