MySQL Tabellenpartitionierung

Diese Kurzanleitung beschreibt die Einrichtung einer Tabellenpartitionierung mit MySQL bei Großinstallationen. Mit immer weiterem Anwachsen der fbm_items Tabelle kann es zu Laufzeitproblemen bei vielen gleichzeitigen Zugriffen auf die Datenbank mit GREYHOUND kommen. Neben diversen Hardwareupdates ist die Partitionierung ein einfaches und kostengünstiges Mittel, die Laufzeitgeschwindigkeit extrem zu erhöhen.

Vor der Einrichtung der Tabellenpartitionierung ist bitte unbedingt die Version des MySQL-Serverszu prüfen: Dieser sollte Version 5.5 oder höher haben, um etwaige Fehler oder Probleme nach der Tabellenpartitionierung zu vermeiden. Eine entsprechende Update-Anleitung ist im Kapitel “MySQL Datenbank-Update” zu finden.

  1. GREYHOUND Server Dienst beenden
  2. Backup des gesamten Datenbestandes inkl. MySQL anfertigen
  3. Queryworx oder vergleichbares MySQL Tool starten und GREYHOUND Datenbank auswählen
  4. Die folgenden SQL Befehle als Abfrage ausführen:
ALTER TABLE `items` DROP INDEX `e_kind`, DROP INDEX `e_state`;
ALTER TABLE `items` CHANGE `e_state` `e_state` TINYINT(1) DEFAULT '1' NOT NULL;
ALTER TABLE `items` CHANGE `e_kind` `e_kind` TINYINT(2) DEFAULT '1' NOT NULL;
ALTER TABLE `items` DROP INDEX `PRIMARY`, ADD PRIMARY KEY(`i_id`, `e_state`, `e_kind`);
ALTER TABLE `items`
PARTITION BY LIST(e_state)
SUBPARTITION BY HASH(e_kind)
SUBPARTITIONS 10 (
 PARTITION isOpen VALUES IN (1),
 PARTITION isNew VALUES IN (2),
 PARTITION isQuestion VALUES IN (3),
 PARTITION isAnswer VALUES IN (4),
 PARTITION isDone VALUES IN (5),
 PARTITION isForward VALUES IN (6),
 PARTITION isDraft VALUES IN (7)      
);

MySQL Abfrage

Experimentell, aber wichtig ist der folgende Schritt:

Durch die Partitionierung sind die bisherigen Werte für “open-files-limit” und “tables-cache” zu gering eingestellt. Durch die Partitionierung werden aus einer Datei 70 Tabellen. Diese sind daher zu erhöhen. Bei 30 Benutzern könnten folgende Werte sinnvoll sein:

table_cache=4096
open-files-limit=10000 (wird automatisch von MySQL um 2048 erhöht)

my.ini

Weitere Infos siehe hier und hier.