MySQL Konfiguration und Tuning

MySQLBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Grundlagen der MySQL-Serverkonfiguration und der Leistungsoptimierung kennen. Sie beginnen mit der Überprüfung der aktuellen Servereinstellungen und ändern dann einen wichtigen Leistungsparameter, die innodb_buffer_pool_size, um zu sehen, wie Änderungen angewendet werden.

Das Lab führt Sie durch die Bearbeitung der MySQL-Konfigurationsdatei, das Neustarten des Servers zur Anwendung von Änderungen und die Überprüfung, ob die neuen Einstellungen aktiv sind. Abschließend lernen Sie eine grundlegende Methode zur Analyse der Abfrageleistung mithilfe des integrierten Profilers von MySQL. Dies bietet eine Grundlage für die Optimierung Ihrer Datenbank für verschiedene Workloads.

Aktuelle MySQL-Konfiguration anzeigen

Bevor Sie Änderungen vornehmen, ist es entscheidend, die aktuelle Konfiguration Ihres MySQL-Servers zu verstehen. In diesem Schritt verbinden Sie sich mit MySQL und überprüfen den Wert einer kritischen Leistungsvariable, innodb_buffer_pool_size.

Öffnen Sie zuerst das Terminal auf Ihrem Desktop.

Verbinden Sie sich als Benutzer root mit dem MySQL-Server. In dieser Laborumgebung können Sie sudo verwenden, um sich ohne Passwort zu verbinden.

sudo mysql -u root

Sobald Sie verbunden sind, sehen Sie die MySQL-Eingabeaufforderung (mysql>).

Systemvariablen steuern das Verhalten des MySQL-Servers. Die Variable innodb_buffer_pool_size bestimmt die Menge des Speichers, der für das Caching von Daten und Indizes für InnoDB-Tabellen zugewiesen wird. Ein richtig dimensionierter Puffer-Pool ist für eine gute Leistung unerlässlich.

Verwenden Sie den Befehl SHOW VARIABLES mit einer LIKE-Klausel, um den aktuellen Wert dieser Variable zu finden.

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

Sie sehen eine Ausgabe ähnlich der folgenden, die den Standardwert in Bytes anzeigt. Notieren Sie sich diesen Wert, da Sie ihn im nächsten Schritt ändern werden.

+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+--------------------------+-----------+
1 row in set (0.01 sec)

Nachdem Sie die aktuelle Konfiguration überprüft haben, können Sie die MySQL-Shell verlassen.

exit

MySQL-Konfigurationsdatei ändern

MySQL-Einstellungen können vorübergehend für die aktuelle Sitzung oder dauerhaft in einer Konfigurationsdatei geändert werden. Um eine Änderung über Serverneustarts hinweg beizubehalten, müssen Sie die Konfigurationsdatei bearbeiten. In diesem Schritt ändern Sie /etc/mysql/my.cnf, um die innodb_buffer_pool_size zu erhöhen.

Öffnen Sie die MySQL-Konfigurationsdatei mit dem Texteditor nano und sudo-Berechtigungen.

sudo nano /etc/mysql/my.cnf

Scrollen Sie nach unten, um den Abschnitt [mysqld] zu finden. Dieser Abschnitt enthält Einstellungen, die spezifisch für den MySQL-Server-Daemon sind. Fügen Sie die folgende Zeile unter der Überschrift [mysqld] hinzu, um die Puffer-Pool-Größe auf 256 Megabyte einzustellen.

innodb_buffer_pool_size=256M

Ihr [mysqld]-Abschnitt sollte nun etwa so aussehen:

[mysqld]
innodb_strict_mode=OFF
init_connect='SET NAMES utf8'
character-set-server = utf8
collation-server=utf8_general_ci
innodb_buffer_pool_size=256M

Speichern Sie nun die Datei und beenden Sie nano. Drücken Sie Strg+X, geben Sie Y ein, um die Änderungen zu bestätigen, und drücken Sie Enter, um in die Datei zu schreiben.

Die Änderungen in der Konfigurationsdatei werden erst wirksam, nachdem der MySQL-Server neu gestartet wurde. Verwenden Sie den Befehl service, um ihn neu zu starten.

sudo service mysql restart

Sie haben nun die Konfiguration dauerhaft aktualisiert. Im nächsten Schritt überprüfen Sie, ob die Änderung aktiv ist.

Konfigurationsänderung überprüfen

Nachdem Sie die Konfigurationsdatei geändert und den Server neu gestartet haben, müssen Sie überprüfen, ob die neue Einstellung korrekt angewendet wurde. In diesem Schritt verbinden Sie sich erneut mit MySQL und überprüfen die Variable innodb_buffer_pool_size.

Verbinden Sie sich mit dem MySQL-Server.

sudo mysql -u root

Führen Sie nun erneut den Befehl SHOW VARIABLES aus, um den neuen Wert anzuzeigen.

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

Die Ausgabe sollte nun den neuen Wert in Bytes anzeigen. MySQL konvertiert 256M (256 Megabyte) automatisch in 268435456 Bytes.

+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_buffer_pool_size | 268435456 |
+--------------------------+-----------+
1 row in set (0.00 sec)

Der Vergleich dieses Wertes mit dem, den Sie in Schritt 1 notiert haben, bestätigt, dass Ihre Konfigurationsänderung erfolgreich war und nun aktiv ist.

Sie können die MySQL-Shell nun verlassen.

exit

Abfrageleistung analysieren

Das Tuning von Servervariablen dient der Verbesserung der Abfrageleistung. Während eine tiefgehende Analyse komplex ist, können Sie den integrierten Abfrage-Profiler von MySQL verwenden, um eine grundlegende Messung der Abfrageausführungszeit zu erhalten. In diesem Schritt erstellen Sie eine Testtabelle, fügen Daten ein und analysieren eine einfache Abfrage.

Verbinden Sie sich zunächst mit dem MySQL-Server.

sudo mysql -u root

Erstellen Sie eine neue Datenbank namens testdb und wechseln Sie zu dieser.

CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;

Erstellen Sie als Nächstes eine Tabelle namens employees, um Beispieldaten zu speichern.

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(50),
    salary INT
);

Fügen Sie einige Datensätze in die Tabelle employees ein.

INSERT INTO employees (name, department, salary) VALUES
('Alice', 'Sales', 60000),
('Bob', 'Engineering', 80000),
('Charlie', 'Sales', 65000),
('David', 'Marketing', 55000);

Aktivieren Sie nun den Abfrage-Profiler für Ihre Sitzung. Dies zeichnet Leistungsdaten für nachfolgende Abfragen auf.

SET profiling = 1;

Führen Sie eine Abfrage aus, die Sie analysieren möchten. Suchen wir zum Beispiel nach allen Mitarbeitern in der Abteilung 'Sales'.

SELECT * FROM employees WHERE department = 'Sales';

Um die Leistungsergebnisse anzuzeigen, verwenden Sie den Befehl SHOW PROFILES. Dieser listet die Abfragen auf, die Sie seit der Aktivierung des Profilings ausgeführt haben, und deren Dauer.

SHOW PROFILES;

Die Ausgabe wird ähnlich wie folgt aussehen und die Dauer jeder Abfrage in Sekunden anzeigen.

+----------+------------+-------------------------------------------------------+
| Query_ID | Duration   | Query                                                 |
+----------+------------+-------------------------------------------------------+
|        1 | 0.00038500 | SELECT * FROM employees WHERE department = 'Sales'    |
+----------+------------+-------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

Diese Spalte Duration liefert Ihnen eine Basislinie für die Abfrageleistung. In einem realen Szenario würden Sie dieses Werkzeug verwenden, um die Abfragegeschwindigkeiten vor und nach Konfigurationsänderungen auf wesentlich größeren Datensätzen zu vergleichen.

Sie haben den Profiler erfolgreich zur Analyse einer Abfrage verwendet. Sie können die MySQL-Shell nun verlassen.

exit;

Zusammenfassung

In diesem Lab haben Sie den grundlegenden Prozess der Konfiguration und des Tunings eines MySQL-Servers kennengelernt. Sie haben geübt, wie Sie die aktuelle Serverkonfiguration einsehen, indem Sie Systemvariablen wie innodb_buffer_pool_size inspizieren.

Sie haben praktische Erfahrungen mit der Änderung der MySQL-Konfigurationsdatei (my.cnf) gesammelt, um dauerhafte Änderungen vorzunehmen, den Server neu gestartet, um sie anzuwenden, und überprüft, ob die neuen Einstellungen aktiv sind. Schließlich wurden Sie in eine grundlegende Technik zur Leistungsanalyse eingeführt, bei der der integrierte Abfrage-Profiler von MySQL zur Messung der Abfragedauer verwendet wird.

Diese grundlegenden Fähigkeiten sind unerlässlich für jeden Entwickler oder Administrator, der für die Wartung einer gesunden und performanten MySQL-Datenbank verantwortlich ist.