1

Analysieren von Protokollen ist ein großes Problem. Wenn Sie einen Legacy-Code haben und Hunderte und Abertausende von Abfragen ausgeführt werden, sind Sie bestimmt verwirrt darüber, was verbessert und wo verbessert werden soll und wie viel zu verbessern ist, da es immer einen Kompromiss gibt zwischen wie viel Aufwand Sie arbeiten auf ein bestimmtes Optimierungsproblem.Wie analysiert man das MySQL Slow Query Log oder das MySQL General Query Log?

Der erste Schritt ist dann zu analysieren, wo wir falsch laufen. Dies kann nur durch eine ordnungsgemäße Analyse der Protokolle erreicht werden. Ohne dass Sie vielleicht eine Idee haben, was genau mit Ihrer Anwendung falsch läuft.

Wie analysieren Sie dann die MySQL-Protokolle?

Antwort

0

Suche mit Schlüsselwörtern, d.h. Tabellennamen oder Spaltennamen.

Während Sie Ihre mobile App oder eine Webanwendung oder eine Desktopanwendung verwenden, wissen Sie, welche Seite mehr Zeit benötigt, um geladen zu werden. Die Ladezeit wird oft von den Abfragen beeinflusst, die im Hintergrund ausgeführt werden. Dies ist jedoch nur der Fall, wenn wir Synchronisierungsaufrufe statt asynchrone Aufrufe durchführen, um die Daten abzurufen. Wenn Sie also die Seite/den Bereich kennen, der langsam geladen wird, haben Sie eine Liste mit Abfragen, die beim Laden auf dieser Seite ausgeführt werden, und eine Liste mit Abfragen, die ausgelöst werden, weil Sie auf dieser Seite eine Aktion ausführen. Sobald Sie die Abfragen kennen, werden Sie wissen, welche Tabellen verwendet werden und welche Spalten abgerufen werden.

Jetzt, wenn Sie das langsame Abfrageprotokoll durchsuchen und Sie sehr hohe Standards für sich selbst festgelegt haben und die langsame Abfragezeit auf 400 Millisekunden setzen, besteht die Möglichkeit, dass Ihr langsames Abfrageprotokoll geladen wird, es sei denn, Sie sind ein Genie . Also, wir tun, um diese einfache Sache:

grep 'table_name' /var/lib/mysql/mysql-slow.log 

Dies stellt mehr Probleme als sie löst, weil alle wichtigen Fragen offen bleiben, wie dies die Abfragezeit nicht geben, Abfragedatum usw. Also, dies tun:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log 

-B x gibt Ihnen x Anzahl der Zeilen vor der Abfrage.

Wir würden das brauchen, weil die 3 Zeilen vor der eigentlichen Abfrage alle Informationen über die Ausführung der Abfrage enthalten - wann wurde die Abfrage ausgeführt und wie viel Zeit hat sie gedauert?

Ein alternativer:

grep -A 3 'query_user' /var/lib/mysql/mysql-slow.log 

Anzahl der langsamen Abfragen während des Tages, Stunde weise

grep Time mysql-slow.log | cut -d: -f1,2 | sort -r | uniq -c 

Ein Hinweis hier: Sie können entweder sort -u verwenden, oder Sie verwenden können sortieren | uniq -c aber sicher sein, dass uniq nicht unabhängig arbeiten wird, wird es nur funktionieren, wenn Sie es mit sortieren. Die Sortierung sollte vor uniq erfolgen.

mysqldumpslow mit dem Log

Getting die Top-10 leistungsschwache Abfragen zu analysieren.

mysqldumpslow -u root -p -s c -t 10 

Wenn Sie in detaillierte Log-Analysen erhalten müssen, sollten Sie die ELK-Stack auf Ihrem Computer und schließen Sie mysql in die Log-Analyse-Setup einrichten.Oder Sie können NewRelic zum Analysieren von MySQL-Protokollen verwenden.

+1

Für mysqldumpslow bevorzuge ich "-s t", um nach "Auswirkungen auf System" zu sortieren. Eine schlecht indizierte Abfrage kann unwichtig sein, wenn sie sehr selten ist. –

+0

@RickJames - Ist ELK eine praktikable Option um MySQL Logs zu analysieren? – MontyPython

+1

Sorry, ich weiß nicht über ELK. Ich habe mich mit der langsamen Anmeldung von Hunderten von Servern beschäftigt und festgestellt, dass _in der Regel _ die _meisten_ nützlichen Informationen in den ersten paar Abfragen angezeigt werden, die von mysqldumpslow -s-t oder pt-query-Digest angezeigt werden.Zeig mir die ersten paar Fragen (plus 'CREATE TABLE' und' EXPLAIN') und ich kann _insergewöhnlich_ wichtige Hinweise geben. –

2

Eine Option: Percona Toolkit

vor einiger große Analyse von langsamen logs ein paar Monate ..

Und ich finde Percona Toolkit sehr nützlich sein. Mit diesem Toolkit können Sie problemlos Ihre langsamen Logs analysieren und die Datenbankoptimierung mit weniger Aufwand optimieren.

um einige nützliche Funktionen zur Analyse von SLOW LOGS zu nennen:

pt-query-digest

können Abfragen von MySQL langsam, allgemein analysieren und binäre Protokolle. (Binärlogs müssen zuerst in Text konvertiert werden, siehe --type). Es kann auch SHOW PROCESSLIST und MySQL-Protokolldaten von tcpdump verwenden. Standardmäßig gibt das Tool an, welche Abfragen am langsamsten und daher am wichtigsten zu optimieren sind. Mit den Optionen --group-by, --filter und --embedded-attributes können komplexere und maßgeschneiderte Berichte erstellt werden.

Anwendungsbeispiel pt-query-digest slow.log

pt-index-usage

Abfragen aus einem Protokoll lesen und analysieren, wie sie Indizes verwenden.

For more information...

Installation

Nun kann nicht jeder Verwendung dieses Tools machen, aber wenn Sie dies sehr hilfreich sein kann, sollte.

+1

Ist ELK eine Option für MySQL? – MontyPython

+1

Ich denke schon, habe ELK nicht für die Analyse von SQL-Logs verwendet. Aber basierend auf meinen anfänglichen Lesungen über das Tool, insb. LogStash, es gibt einige aktuelle Blogs, die über die Verwendung des Tools für die Analyse diskutieren. Schaut es euch an, es gibt ein paar Artikel, die euch helfen können. –

+0

Ja, eigentlich arbeite ich gerade daran. Wird detailliert posten, wenn ich genügend Arbeitswissen dazu sammle. – MontyPython

0

Die MySQL-Protokolle können speziell für einen produktiven MySQL-Server sehr groß sein. In solchen Fällen kann die Analyse des langsamen/allgemeinen Abfrageprotokolls eine mühsame Aufgabe sein (ich war früher in derselben Situation). Die Query Analyzer-Funktion von Monyog ist in solchen Situationen sehr praktisch, da sie ein einzelnes Fenster enthält, in dem Sie den gesamten Inhalt eines langsamen/allgemeinen Abfrageprotokolls abrufen können. Außerdem können Sie verschiedene Filter wie Komma-getrennte mysql-Benutzer einfügen, für die Sie die ausgeführten Abfragen, den Hostnamen, sehen möchten. Sie können auch die Größe der Protokolldateien oder die Anzahl der Zeilen begrenzen, die aus den MySQL-Protokolldateien gelesen werden sollen. Monyog hat mir eine Menge Zeit bei der Analyse von MySQL-Logs geholfen und ich denke, es ist das Beste auf dem Markt, basierend auf den Preisen auf dem gegenwärtigen Markt.

Es verfügt auch über ein weiteres Feature namens Real-Time, das die Abfragen anzeigt, die in Echtzeit-Sitzungen ausgeführt werden. Sie können die Sitzung auch speichern, um sie bei Bedarf in Zukunft zu überprüfen. Sie können verschiedene Sniffing-Modi wie Performance-Schema, Processlist oder MySQL Proxy auswählen, um MySQL-Abfragen zu scannen. Sie können Benachrichtigungen aktivieren, um jederzeit den Status Ihres MySQL-Servers zu erfahren.