Aktivieren Sie das Abfrageprotokoll für eine einzelne Datenbank

8

Ich habe viele Datenbankschemata auf dem MySQL 5.6-Server. Jetzt besteht das Problem hier darin, dass ich die Abfragen nur für ein Schema abfangen möchte.

Ich kann das Abfrageprotokoll nicht für den gesamten Server aktivieren, da eines meiner Schemas stark ausgelastet ist und sich auf den Server auswirkt.

Ist ihre Art und Weise, jedes Tool, mit dem ich die Abfragen nur nach einem einzigen Schema protokollieren konnte.

Ich habe ein Benchmarking-Diagramm gefunden, das die Auswirkungen auf Transaktionen / Sekunde zeigt, wenn das Abfrageprotokoll aktiviert ist.

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

Suyash Jain
quelle
Können Sie stattdessen ein langsames Abfrageprotokoll verwenden? Und dann das Protokoll mit pt-query-Digest analysieren? Wenn nicht, können Sie versuchen, tcpdump Ausgabe von pt-query-Digest
analysiert

Antworten:

1

Interessante Frage und eine +1. Das hat mich interessiert, weil ich mehrere Anwendungsfälle für diese Funktionalität sehen kann.

Leider gibt es für Ihren Fall, in dem Sie die allgemeine Protokollierung nicht aktivieren können, nur eine, eher unzureichende Problemumgehung.

Verwenden Sie dazu die Variable SQL_LOG_OFF , um die Protokollierung für eine bestimmte Verbindung zu deaktivieren. Eine ideale Lösung wäre gewesen, eine "SQL_LOG_ON" -Variable zu haben, wie dies in Oracle möglich ist (äquivalent). Vielleicht könnten Sie versuchen, die Abmeldung für alle außer den interessierenden Verbindungen zu deaktivieren?

Darüber hinaus erfordert dies leider das SUPERPrivileg. Auch dies ist in Ihrem Fall möglicherweise nicht (wahrscheinlich sogar nicht) möglich.

Abhängig von der Schwere Ihres Problems, der Arbeitszeit und der Serverlast zu bestimmten Zeiten können Sie möglicherweise eine Verwendung für Perconas pt-query-Digest finden, die bei der Protokollanalyse hilfreich sein kann. Kleiner Komfort, aber wie immer ist PostgreSQL MySQL weit voraus ( 1 , 2 ).

Wenn Sie eine Funktionsanfrage stellen möchten, würde ich gerne ein "Ich-auch" melden, wenn Sie den Link hier zurück posten.

Vérace
quelle
1

Wenn Sie so kurz vor dem Umkippen stehen, dass Sie das allgemeine Protokoll nicht auf DATEI aktivieren können, haben Sie schlimmere Probleme. Sie müssen repariert werden.

Ich vermute, ohne wirkliches Wissen, dass das Slowlog ähnliche Auswirkungen haben würde, insbesondere bei long_query_time = 0.

5.7 verfügt über eine Funktion zum Umschreiben von Abfragen. Dort könnte ein Trick angewendet werden. (Aber auch hier gibt es einige Gemeinkosten, die gemessen werden sollten.)

Wie lange möchten Sie die Anfragen abfangen? Suchen Sie nur nach der Quelle einer ungezogenen Handlung? Oder versuchen Sie, Abfragen zu sammeln, um einen realistischen Benchmark für diese Tabelle zu erstellen? Oder etwas anderes?

Haben Sie die Replikation aktiviert? Interessieren Sie sich für Lesungen? Oder schreibt? Oder beides?

Wie viele Threads sind gleichzeitig aktiv ? Der von Ihnen angezeigte Benchmark zeigte an, dass für 1 das Protokoll einen geringen Overhead hat. Es ist die Tabellensperre in MyISAM oder CSV, die die Verarbeitung für eine hohe Parallelität beendet.

Ihr zweites Diagramm zeigt, dass die Clients wirklich auf etwa 5-8 gleichzeitige Verbindungen beschränkt sein sollten - sonst sinkt der Durchsatz tatsächlich! Was war max_connectionsund Max_used_connectionsfür diese Grafik?

Rick James
quelle
Hallo, ich möchte die Abfragen für ungefähr 2 Tage erfassen und diese Grafiken beziehen sich nicht auf mein Benchmarking ... Ich habe sie nur aus Wissensgründen eingefügt. Die App, für die ich die Abfragen haben möchte, ist ein Verbraucher mit geringen Ressourcen. Tcpdump liefert keine Timing-Statistiken.
Suyash Jain