Untersuchen Sie den Spitzenwert des MySQL-Durchsatzes


7

Vor kurzem hat einer unserer Server nicht mehr genügend Speicher und ist abgestürzt. Nach Durchsicht der muninDiagramme scheint die einzige Metrik (außer der Speichernutzung), die kurz vor dem Absturz ihren Höhepunkt erreicht hat, die zu sein MySQL throughput. Wir hatten jedoch einen entsprechenden Anstieg erwartet, von MySQL queriesdem dies nicht der Fall war:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Wir möchten herausfinden, was diesen Spitzenwert im MySQL-Durchsatz verursacht hat. Hier ist die Liste der Bin-Protokolle vom Absturz:

101M Apr 17 01:27 drupal_master-bin.001270
106M Apr 17 03:00 drupal_master-bin.001271
101M Apr 17 04:05 drupal_master-bin.001272
104M Apr 17 05:53 drupal_master-bin.001273
104M Apr 17 06:39 drupal_master-bin.001274
101M Apr 17 07:02 drupal_master-bin.001275
104M Apr 17 07:22 drupal_master-bin.001276  # 100M filled up in 1 min
106M Apr 17 07:23 drupal_master-bin.001277
101M Apr 17 07:33 drupal_master-bin.001278
101M Apr 17 07:43 drupal_master-bin.001279
104M Apr 17 07:46 drupal_master-bin.001280
102M Apr 17 08:29 drupal_master-bin.001281
102M Apr 17 08:46 drupal_master-bin.001282
105M Apr 17 08:54 drupal_master-bin.001283
 13M Apr 17 09:26 drupal_master-bin.001284  # crash of server around 09:50
# prior to crashing load went very high (we saw 45) and server was extremely slow (few min delay when typing in an SSH session)
101M Apr 17 10:54 drupal_master-bin.001285  # server up again, nothing wrong since then

Ich habe nach Tools gesucht, um diese Bin-Protokolle zu analysieren. Bisher habe ich gefunden:

binlog-analyze.pl : gibt mir einen Überblick über die von Anfragen bearbeitet, mit Aufschlüsselung auf select, insert, update.. (FYI ersetzt ich select intomit selectin dem Skript , wie es falsch schien).

$ mysqlbinlog /path/to/bin.log | binlog-analyze.pl -v

pt-query-Digest : Gibt mir Statistiken zur Abfragegröße (min, max, avg ...). Dieses Dienstprogramm bietet viele Optionen, aber ich weiß nicht, wonach ich suchen soll.

$ mysqlbinlog /path/to/bin.log | pt-query-digest

Wir möchten herausfinden, welche Abfragen zu einem Anstieg der MySQL-Ausgabe geführt haben.

Kann jemand Anweisungen geben, wie die MySQL-Bin-Protokolle überprüft werden, um Abfragen zu identifizieren, die zu einem plötzlichen Anstieg des MySQL-Durchsatzes führen?

Antworten:


1

Das Analysieren von Binlogs liefert möglicherweise kein genaues Bild, da Binlogs Abfragen enthalten, die abgeschlossen wurden und wie eine FIFO-Warteschlange in die Binärprotokolle eingefügt werden.

Was Sie wirklich suchen müssen, ist, wie das Historgramm der aktiven Ausführung von Abfragen aussieht. Mit anderen Worten, Sie müssen die Prozessliste abfangen, um zu enthüllen, welche Abfragen und wie die Leistung war, als die besonderen Umstände eintraten.

Ich empfehle dringend, den pt-query-Digest zu verwenden, aber Sie müssen ihn anders verwenden. Lassen Sie den Abfrage-Digest die Binlog-Einträge verarbeiten und die Prozessliste LIVE verarbeiten !!!

Ich habe in einem früheren Beitrag (24. November 2011) geschrieben, wie der pt-query-Digest (mein Beitrag verwendet mk-query-Digest ) als Ersatz für das langsame Abfrageprotokoll verwendet wird (ich habe das tatsächlich verwendete Skript veröffentlicht und wie um die Ausgabe des Abfrage-Digests zu lesen): Auswirkungen der allgemeinen Leistung des MySQL-Abfrageprotokolls . Mein früherer Beitrag basierte auf einem YouTube-Video, das zeigt, wie es geht . Ich habe mich einfach mit mk-query-Digest emuliert .


Dein Beitrag sieht gut aus. Ich werde mich eingehender damit befassen und versuchen, diese Tools für das nächste Mal bereit zu halten, wenn das Problem auftritt. Beim letzten Auftreten des Problems war die Last jedoch so hoch, dass die Box praktisch unbrauchbar war. Wir befürchten, dass wir ohnehin keine Ermittlungen durchführen können, wenn wir darauf warten, dass das Problem erneut auftritt. Ich verstehe, dass es besser ist, Live-Untersuchungen durchzuführen, aber können wir derzeit noch nichts mit den Binlogs tun?
Max

0

Vor kurzem hat einer unserer Server nicht mehr genügend Speicher und ist abgestürzt.

Haben Sie das Tauschen verboten? Andernfalls wird MySQL (kläglich) langsamer, stürzt aber nicht ab. Ein Austausch sollte vermieden, aber nicht verhindert werden.

Haben Sie einige Tunables zu hoch eingestellt? Siehe http://mysql.rjweb.org/doc.php/memory

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.