Dienstag, 3. Juni 2014

MySQL - InnoDB vs. MyISAM vs. ARCHIVE im Vergleich

Hier ein kleiner Performance-Vergleich, was das Einlesen und Schreiben von Daten angeht (I/O).

Grundlage ist MySQL 5.6.19 und Perl 5.10.1.
Als Datenquelle dient ein Squid-Log mit 9.244.247 Zeilen (428 MB).

Perl


Als Referenz für die I/O-Performance wird die Log-Datei zuerst nur mit Perl gelesen (OPEN), die "Spalten" dabei in einen Array gepackt und der Inhalt wiederum in eine Datei geschrieben.

Das Ganze dauert auf dem verwendeten vServer 31 Sekunden (verifiziert durch drei Läufe).

MySQL


Nun wird die Datei wieder mit Perl eingelesen, statt in eine andere Datei aber in eine MySQL-Datenbank geschrieben (INSERT INTO). Danach wird die Datenbank abgefragt (SELECT) und der Inhalt wieder ausgegeben. Die Transaktionen werden mit $dbh->prepare() vorbereitet und dann mit $sth->execute() wiederholt ausgeführt.

Getestet werden die Speicher-Engines "InnoDB" und "MyISAM", unkomprimiert und komprimiert, sowie die Engine "ARCHIVE". Ziel ist die Ermittlung der erreichbaren Lese- bzw. Abfrage- und Schreibgeschwindigkeiten sowie die entstehenden Dateigrößen.

InnoDB


...

MyISAM


...

ARCHIVE


...


Montag, 2. Juni 2014

MySQL - aktuelle Version über Repository installieren

Bei RHEL (Red Hat Enterprise Linux) und damit auch CentOS (Community ENTerprise Operating System) kommt bei der Version 6.5 das Datenbankmanagementsystem (DBMS) MySQL standardmäßig in der zwar bewährten, aber ziemlich alten Version 5.1 zum Einsatz.

Diese veraltete Version nutzt standardmäßig z.B. noch die Speicher-Engine (Storage Engine) "MyISAM"; die auch schon in der Version 5.1 enthaltende Engine "InnoDB" ist dagegen transaktionssicher und gerade bei großen Datenmengen performanter als MyISAM. InnoDB ist in neueren Versionen von MySQL die Standard-Engine.

Ein weiterer Grund, warum man eine neuere Version von MySQL verwenden sollte ist, dass die Version 5.1 noch kein richtiges UTF-8 mit 4-Byte-kodierten Zeichen unterstützt. Neuere Versionen bieten dafür auch den Zeichensatz bzw. die Zeichenkodierung "utf8mb4".

MySQL über Repository in aktueller Version installieren


Man kann die aktuelle Version von MySQL direkt von MySQL.com beziehen; die "Community Edition" ist kostenlos erhältlich. Eine Anleitung für RPM-basierte Distributionen (YUM) gibt es z.B. dort, eine Anleitung für DEB-basierte Distributionen (APT) dagegen dort.

Notwendige Schritte (für frisches Aufsetzen auf CentOS 6.5):
  1. evtl. installierte ältere Version ggf. erst deinstallieren: yum remove mysql
  2. das Verzeichnis /var/lib/mysql und dessen Inhalt ggf. löschen
  3. die passende Repo.-RPM-Datei von dort herunterladen
  4. als 'root' rpm -Uvh mysql-community-release-el6-5.noarch.rpm ausführen
  5. als 'root' MySQL installieren: yum install mysql-community-server
  6. ... der Rest kann der MySQL-Datenbank - Übersicht für Anfänger entnommen werden!