Ein Blog über Code, Hardware und Co

NAS, Server und Co, Kurz notiert

MariaDB10 auf einem Synology NAS optimieren

Oder mit Hilfe von mysqltuner.pl den DBMS auf dem NAS optimieren

Ich habe auf meinem NAS einige Webseiten laufen – ja, ein Synology NAS eignet sich aufgrund des integrierten Webservers, der Linux-Basis und MariaDB als Pakt sehr gut dafür. Aber gerade bei größeren Webseiten ist es sinnvoll den Datenbankserver – in diesem Fall MariaDB10 zu optimieren. Synology hält hier ein paar Besonderheiten bereit.

Trotzdem lohnt sich die Optimierung weiter unten im Artikel definitiv. Denn bei Webseiten – gerade bei WordPress – kommen schnell hunderte Datenbankabfragen zusammen, oder Queries, die über viele Datenbanktabellen hinweg gehen. Hier macht sich ein Performancegewinn schnell in den Ladezeiten bemerkbar.

Besonderheiten bei MariaDB10 auf dem Synology NAS (DSM 6.x)

Verbindungsherstellung

Einige Zeit hat es mich gekostet, meine WordPress-Webseiten (oder andere Webseiten mit Datenbankanbindung) auf dem Synology NAS zum Laufen zu bringen. Denn auch, wenn man bei der Paketinstallation den MySQL-Standardport 3306 auswählt, wird MariaDB 10 mit einigen Besonderheiten installiert. Vermutlich liegt das daran, dass es ebenfalls bei DSM6.x noch MariaDB5 als Paket gibt, das mit den Standards installiert wird.

Eine Verbindungsherstellung mittels simpel “localhost” schlägt fehl:

define('DB_HOST', 'localhost');

resultiert also in:

Error establishing a database connection

Na klasse 😉

Wie auch immer. MariaDB nutzt einen spezifischen Socket:

/run/mysqld/mysqld10.sock

Daher ist es wie folgt möglich, eine Verbindung herzustellen:

define('DB_HOST', 'localhost:/run/mysqld/mysqld10.sock');

Oder alternativ die Verbindung über die localhost-IP (mit Portübergabe).

define('DB_HOST', '127.0.0.1:3307');

Achtung: Sollte auch MariaDB5 installiert sein, lauscht MariaDB10 auf Port 3307.

Optimierung von MariaDB10 auf Synology NAS

Schaut man sich die Meinungen im Netz an, wird schnell klar “Ein NAS ist kein Server” oder “MySQL auf einem NAS? Das kann niemals performant sein”. Aber ist das wirklich so?

Ein klares JEIN!

Bei Einsteiger-NAS (z.B. den se oder j-Serien) kann das durchaus der Fall sein. Spätestens ab der +-Serie sind Synology-NAS aber durchaus performant genug. Wird der RAM noch etwas aufgerüstet, steht einem leistungsfähigen Datenbankserver nichts mehr im Wege. Ich betreibe selbst mehrere Webseiten mit täglich mehreren tausend Besuchern auf einem Synology NAS (DS3018xs).

Mein Lieblingstool zum Optimieren des Datenbankservers ist der mysqltuner. Ein einfaches Perl-Skript, das die Statistiken des Datenbankservers im laufenden Betrieb ausliest und instant Vorschläge zur Anpassung wichtiger Variablen liefert.

Schritt 1: Zunächst den mysqltuner herunterladen (auf der Konsole):

benutzer@nas:~# wget mysqltuner.pl

Schritt 2: Skript ausführen

benutzer@nas:~# perl mysqltuner.pl

Achtung: Hier schlägt die Ausführung bei installiertem MariaDB10 mit folgender Meldung fehl:

[!!] Couldn't find mysql/mariadb in your $PATH. Is MySQL installed?

Das liegt daran, dass die MariaDB10-Binaries bei Synology unter einem spezifischen Pfad liegen, der nicht in der globalen $PATH-Variable ist.

Schritt 3: MariaDB10-Binaeries der PATH-Variable hinzufügen

Die MariaDB10-Binaries liegen unter:

/usr/local/mariadb10/bin

Daher fügen wir mittels

PATH=$PATH:/usr/local/mariadb10/bin

den Pfad der globalen $PATH-Variable hinzu.

Schritt 4: Skript ausführen

benutzer@nas:~# perl mysqltuner.pl

Bingo! Läuft 😉

Die Ausgabe sagt dir nun eine ganze Menge über deinen MAriaDB10-Datenbankserver. Besonders spannend ist aber der letzte Abschnitt, da uns hier direkt Empfehlungen für die Anpassung der Konfiguration gegeben werden:

Bild 1: Optimierungsvorschläge vom mysqltuner.

Schritt 5: Optimierungen eintragen

Die Variablen müssen wir nun eintragen/anpassen. Dies geschieht in der Konfigurationsdatei “my.cnf”.

Diese Datei liegt unter DSM6.x auf dem Synology NAS unter:

/var/packages/MariaDB10/etc/my.cnf

Hier einfach Anpassung vornehmen, MariaDB über die Weboberfläche des NAS neustarten, fertig.

Möglich Werte/Optimierungen

Bei Synology NAS sind besonders nach einer RAM_Aufrüstung (8GB oder mehr) große Performancegewinne zu erreichen, wenn diverse Buffer vergrößert werden.

So könnte eine Config aussehen:

[mysqld]
performance_schema = ON
join_buffer_size = 4M

#Beide Variablen sollten den gleichen Wert haben
tmp_table_size = 256M
max_heap_table_size = 256M

table_open_cache = 1000
table_definition_cache = -1
key_buffer_size = 512M
innodb_buffer_pool_size = 3G
innodb_log_file_size = 750M
innodb_buffer_pool_instances = 3
skip-external-locking
max_allowed_packet = 2M
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 12M
myisam_sort_buffer_size = 128M

#CPU Einstellungen CPU-Kerne*2
thread_concurrency = 6
thread_cache_size = 6

#Query Cache Einstellungen
query_cache_size = 256M
query_cache_type = 1

[myisamchk]
key_buffer_size:? = 128M
sort_buffer_size = 32M
read_buffer = 4M
write_buffer = 4M

Quellen

  • https://www.synology.com/en-global/knowledgebase/DSM/tutorial/Service_Application/Can_MariaDB_settings_be_customized_on_Synology_NAS
  • https://www.boernyblog.de/mariadb-auf-synology-diskstation-beschleunigen/

Schreibe eine Antwort