Datenbank Profiling bei MariaDB

Wenn Datenbanken überlastet sind und man das ändern möchte, ist es wichtig den Verursacher zu finden und geeignete Gegenmaßnahmen zu ergreifen. Um diesen zu finden, bietet sich ein Datenbank Profiling an. Bei einem Datenbank Profiling analysiert man die Anzahl und Dauer der Datenbank Anfragen. Dem Ergebnis kann man dann entnehmen, welche Abfragen besonders häufig vorkommen bzw. besonders lange dauern. Dadurch kann man den Verursacher identifizieren und geeignete Tuningmaßnahmen durchführen.

Ich nutze für ein solches Profiling bei MariaDB und MySQL gerne das Programm pt-query-digest aus dem percona-toolkit. Mit Hilfe dieses Programms kann man die slowest queries aus der Logdatei slow.log auswerten. In dieser Logdatei werden von MySQL bzw. MariaDB die langsamen Abfragen protokolliert.

Das percona-toolkit kann bei Debian mit dem folgenden Befehl aus den normalen Paketquellen installiert werden.

apt install percona-toolkit

Damit MariaDB die langsamen Abfragen im slow.log protokolliert, muss in der Datenbank der Parameter “slow_query_log=1” gesetzt sein. Wenn man zudem vorher den Parameter “long_query_time=0” gesetzt hat, werden alle SQL Abfragen in dem Log protokolliert. Dadurch kann man anschließen ein Profiling der alle Anfragen durchführen.

Die Protokollierung der langsamen Abfragen in die Datei “/var/log/mysql/profile-slow.log” kann man während des Betriebes ohne Unterbrechung aktivieren, indem man sich mit der Datenbank verbindet und folgende Befehle eingibt.

set global slow_query_log=0;
set global slow_query_log_file='/var/log/mysql/profile-slow.log';
set global long_query_time=0;
set global log_slow_rate_limit=1;
set global slow_query_log=1;

Nach einer angemessenen Zeit sollte man das aber wieder abdrehen, um die Logdatei nicht zu groß werden zu lassen. Aus diesem Grund stelle ich das Jogging nach 1-3 Stunden mit den folgenden Befehlen wieder zurück.

set global slow_query_log=0;
set global slow_query_log_file='/var/log/mysql/mariadb-slow.log'
set global long_query_time=1;
set global log_slow_rate_limit=100;
set global slow_query_log=1;

Die in der Zwischenzeit erzeugte Logdatei kann man dann mit dem Programm pt-query-digest auswerten und den Bericht in der Datei db_profile.txt schreiben lassen. Dazu gibt man den folgenden Befehl ein.

pt-query-digest /var/log/mysql/profile-slow.log > db_profile.txt

Anschließend kann man die Datei db_profile.txt mit einem Editor seiner Wahl öffnen und der Analyse den Grund der Datenbank Überlastung entnehmen.


Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

WordPress Cookie Hinweis von Real Cookie Banner