Skip to main content

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 = value oder key 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?

  1. Werte werden gegen die Whitelist geprueft (Verwerfen bei Verstoss).
  2. Neue 99-webunit-custom.cnf wird auf der Node erzeugt.
  3. Der DB-Container wird noch nicht automatisch neu gestartet — du siehst den neuen Wert erst nach einem Restart:
    Admin-Panel → Subscription → Container → "DB-Container neustarten"
    
    (oder wir bauen das noch als Auto-Restart bei Config-Aenderung — im Zweifel: uns ansprechen).

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_size aendern 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_size sollte ~50-70% des DB-Container-Speichers sein. Wenn du die Container-Memory-Limit unter dem Wert setzt, wird MariaDB OOM-killed.
  • max_connections hochziehen hilft nur wenn dein Framework wirklich so viele parallele Verbindungen macht. Standard 200 reicht meist — hoehere Werte kosten RAM ohne Nutzen.