30 MariaDB-Tuning (Custom-Config)
MariaDB-Tuning per Custom-Config
Fuer jede Datenbank kannst du eigene MariaDB-Einstellungen setzen — analog zum PHP-Custom-INI. Die Werte ueberschreiben die Webunit-Defaults.
Wo?
Admin-Panel → Subscription → Bearbeiten → Tab Datenbanken → pro Datenbank ein Feld Custom MariaDB-Config.
Webunit-Defaults (bereits aktiv fuer alle DBs)
[mysqld]
max_allowed_packet = 64M
wait_timeout = 600
interactive_timeout = 600
max_connections = 200
Alles was du ins Custom-Feld schreibst, ueberschreibt diese Werte.
Copy-&-Paste-Snippets
Grosse Import-/Export-Operationen (grosse Bloetter, PDF-Anhaenge in DB)
max_allowed_packet = 256M
Shopware / grosser Katalog mit vielen Produkten
max_allowed_packet = 128M
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
tmp_table_size = 128M
max_heap_table_size = 128M
sort_buffer_size = 8M
join_buffer_size = 8M
WordPress mit vielen Plugins
max_allowed_packet = 64M
innodb_buffer_pool_size = 256M
tmp_table_size = 64M
max_heap_table_size = 64M
Slow-Query-Log fuer Performance-Analyse
slow_query_log = 1
long_query_time = 1
log_queries_not_using_indexes = 1
Slow-Log landet im DB-Container unter /var/lib/mysql/*-slow.log und ist
per SSH oder docker exec einsehbar.
Utf8mb4 mit korrekter Collation (Emojis in Kunden-Kommentaren)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Strikter SQL-Mode fuer neue Projekte
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Whitelist — was ist erlaubt?
Erlaubt sind gaengige Tuning-Parameter fuer:
- Verbindungen / Timeouts:
max_connections,max_user_connections,wait_timeout,interactive_timeout,connect_timeout,net_read_timeout,net_write_timeout - Packet-Groesse:
max_allowed_packet - Buffers / Caches:
sort_buffer_size,join_buffer_size,read_buffer_size,read_rnd_buffer_size,tmp_table_size,max_heap_table_size,table_open_cache,thread_cache_size,key_buffer_size - InnoDB:
innodb_buffer_pool_size,innodb_buffer_pool_instances,innodb_log_file_size,innodb_log_buffer_size,innodb_flush_log_at_trx_commit,innodb_flush_method,innodb_file_per_table,innodb_io_capacity[_max],innodb_lock_wait_timeout,innodb_open_files,innodb_read_io_threads,innodb_write_io_threads,innodb_thread_concurrency,innodb_strict_mode - Logging:
slow_query_log,long_query_time,log_queries_not_using_indexes,general_log - SQL-Mode / Charsets:
sql_mode,character[-_]set[-_]server,collation[-_]server,default[-_]time[-_]zone,default_storage_engine - Sonstige:
group_concat_max_len,lower_case_table_names,transaction_isolation,skip_name_resolve,open_files_limit
Nicht-erlaubte Keys werden still verworfen — landen als Kommentar in
der generierten 99-webunit-custom.cnf (im DB-Container unter
/etc/mysql/mariadb.conf.d/). Verworfen werden aus Sicherheitsgruenden
z.B. secure_file_priv, plugin_dir, log_bin, datadir — die wuerden
den Container-Betrieb kompromittieren.
Konfigurations-Format
- Eine Direktive pro Zeile:
key = valueoderkey value - Kommentare mit
#oder; - Sektions-Header wie
[mysqld]werden ignoriert — alles landet automatisch im[mysqld]-Block der generierten Config -und_in Key-Namen sind aequivalent (MariaDB-Konvention)
Was passiert nach dem Speichern?
- Werte werden gegen die Whitelist geprueft (Verwerfen bei Verstoss).
- Neue
99-webunit-custom.cnfwird auf der Node erzeugt. - Der DB-Container wird noch nicht automatisch neu gestartet — du
siehst den neuen Wert erst nach einem Restart:
(oder wir bauen das noch als Auto-Restart bei Config-Aenderung — im Zweifel: uns ansprechen).Admin-Panel → Subscription → Container → "DB-Container neustarten"
Aktuelle Werte pruefen
Per SSH ins Sub-Container:
mariadb -u <username> -p<pass> -e "SHOW VARIABLES LIKE 'max_allowed_packet'"
Oder via phpMyAdmin (Zahnrad-Icon rechts oben, dann "Server-Variablen").
Wichtige Anmerkungen
innodb_log_file_sizeaendern heisst: beim naechsten Start regeneriert MariaDB das Redo-Log. Das kann 1-2 Minuten dauern. Nur aendern wenn's einen Grund gibt.innodb_buffer_pool_sizesollte ~50-70% des DB-Container-Speichers sein. Wenn du die Container-Memory-Limit unter dem Wert setzt, wird MariaDB OOM-killed.max_connectionshochziehen hilft nur wenn dein Framework wirklich so viele parallele Verbindungen macht. Standard 200 reicht meist — hoehere Werte kosten RAM ohne Nutzen.