Contents
Hintergrund
Die Datenbank für WordPress ist ein essentieller Bestandteil. Betrachtet man einen Seitenaufbau mit Query Monitor stellt man fest, dass einige Hundert Zugriffe auf die Datenbank pro Seitenaufbau durchgeführt werden können. Daher bringen schon wenige Millisekunden Performancegewinn bei Einzelzugriffen in der Summe einen deutlichen Effekt.
MariaDB Performance beschleunigen
Über die Performance der MariaDB einer Synology DiskStation wird im Web viel geschrieben — und nicht immer Positives. Dabei ist gerade hier die Optimierung sehr einfach und sehr effizient!
Synology selbst beschreibt, dass man den MySQL Cousin nachhaltig konfigurieren kann. Das ist nicht weiter schwierig, erfordert aber die Nutzung der Kommandozeile.
- SSH für die DiskStation aktivieren
- als Administrator anmelden
slogin -l <admin-kennung> <diskstation-ip>
- die Datei my.cnf für persönliche Einstellungen anlegen und wie später beschrieben anpassen
sudo vi /var/packages/MariaDB/etc/my.cnf
- Neustart der Datenbank
sudo /usr/syno/bin/synopkg restart MariaDB
- Überprüfen der Werte
mysqld --verbose --help
Anpassungen
Doch was wird nun konfiguriert? Die Speicherwerte werden vergrößert und vor allem wird der Query Cache aktiviert, der aus irgendwelchen Gründen bei Synology von Haus aus deaktiviert ist.
Bei meiner Synology (eine DS716+II in diesem Fall) wurde das RAM auf 8GB erweitert. Somit kann locker die my-large.cnf
aus dem Verzeichnis /usr/share/mysql/
verwendet werden. Die InnoDB wird ebenfalls verwendet und die Werte aus my-innodb-heavy-4G.cnf
dürfen auch herangezogen werden.
Es gibt verschiedene Empfehlungen je nach RAM Ausstattung und Anzahl der CPU-Kerne. Einige Artikel finden sich im Anhang.
Ich meinem Fall habe ich folgende Vorschläge aus der my-large.cnf
kombiniert mit den Vorschlägen aus my-innodb-heavy-4G.cnf
in die custom /var/packages/MariaDB/etc/my.cnf
übernommen. Wobei den größten Effekt die Aktivierung des Query-Cache gebracht hat!
[mysqld] # InnoDB innodb_buffer_pool_size = 2G innodb_additional_mem_pool_size = 16M # Basics key_buffer_size = 512M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 128M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 thread_cache_size = 8 # folgende beiden Werte sollten immer identisch sein tmp_table_size = 64M max_heap_table_size = 64M # InnoDB innodb_buffer_pool_size = 2G innodb_additional_mem_pool_size = 16M # Query Cache query_cache_size= 16M query_cache_type = 1 [myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M
Aus dem Test mit Query Monitor habe ich festgestellt, dass der query-cache nicht aktiv ist. Auch der Speicher für temporäre Tabellen könnte fehlen, was zu unvermeidlichen Festplattenzugriffen führt. Daher müssen mindestens folgen Zeilen ergänzt/überprüft werden (hier für ein kleiners 2GB RAM System):
[mysqld] query_cache_size= 16M query_cache_type = 1 tmp_table_size = 16M max_heap_table_size = 16M
Resources
Fazit
Systemspeicher ist essentiell, daher muss genügen RAM vorhanden sein. Der Server darf keine SWAP Datei anlegen! Wenn man also weniger RAM hat, lieber sehr genau die Empfehlungen beachten!
Ist diese Grundvorraussetzung gegeben erweitert man die Puffergrößen auf ein vernünftiges Mass. Gute Richtwerte liefern die mitgelieferten Beispielskonfigurationsdateien.
Mit etwas Mut auf der Kommandozeile erreicht man so ein top performantes System. Viel Spaß!
4 Gedanken zu “MariaDB auf Synology DiskStation beschleunigen”
Hallo, ich bin sehr froh, dass es diesen Tipp hier gibt, ich bin nur über eines nicht ganz schlüssig. Warum stehen in dem Beispiel machen Eintrage doppelt da? Z.B. key_buffer_size = 512M taucht einmal unter basics und einmal unter myisamchk auf
Das ist das gleiche Argument, allerdings für zwei verschiedene MySQL Programme. Während zuerst der eigentliche mysql Datenbankdienst konfiguriert wird, habe ich die Konfiguration auch für den Überprüfungsdienst mysqlchk übernommen, ansonsten würde dieser auch mit den Standardwerten laufen. Das wirkt sich allerdings dann nicht auf die Betriebsperformance aus. Wichtiger sind also die Werte unter dem Abschnitt [mysqld]
Seit MariaDB 10 ist innodb_additional_mem_pool_size deprecated und in 10.2 wurde die Variable komplett entfernt. Das hat dazu geführt, dass MariaDB nach einem Paketupgrade bei mir plötzlich nicht mehr starten wollte. Die zwei Zeilen (Der innoDB-Block ist aus unklarem Grund hier doppelt) entfernen hilft dann direkt. Möglicherweise hilft die Info ja dem ein oder anderen.
@Tammo: Danke für den Hinweis. Beste Grüße Peter