Grundsätzlich haben die verschiedenen MySQL-Storage-Engines eigene Möglichkeiten für eine gewisse Transaktionssicherheit zu sorgen. Während InnoDB eine wirkliche ACID-Transaktionsverwaltung unterstützt bietet MyISAM dafür keine Unterstützung an. Besonders gut zu bemerken ist die Situation bei einer ausgeglichenen Schreib-Leserate und damit verbundenen Lockaufkommen.
Obwohl MyISAM nur eine Table-Level-Locking unterstützt gibt es trotzdem die Möglichkeit eines gleichzeitigen Schreib- Lesevorgangs. Der hierfür zuständige Parameter lautet concurrent_insert und steuert die Behandlung zeitgleicher Zugriffe auf eine Tabelle. Nachfolgend kurz die Erläuterung der möglichen Parameter:
- 0 = Die Funktion ist deaktiviert.
- 1 = Dies ist die Standardeinstellung. Sie aktiviert nebenläufige Einfügeoperationen für MyISAM-Tabellen, die keine Lücken aufweisen.
- 2 = Dieser Wert aktiviert nebenläufige Einfügeoperationen für alle MyISAM-Tabellen. Wenn eine Tabelle eine Lücke aufweist und gerade von einem anderen Thread verwendet wird, wird der neue Datensatz am Tabellenende eingefügt. Wird die Tabelle gerade nicht verwendet, dann setzt MySQL eine normale Lesesperre und fügt den neuen Datensatz in die Lücke ein.
Damit also die Standardeinstellung richtig funktioniert und MyISAM ein Anhängen von Tabellenzeilen zulässt ist es wichtig regelmässig Optimize Table auszuführen und so die vorhandenen Lücken zu schliessen.
!!! Wichtig !!! Leider funktioniert das nicht mehr, wenn das Schreiben von Binlogs aktiviert ist, da die Datenbankengine sich dann „gezwungen“ fühlt die richtige Reihenfolge serialisiert einzuhalten um eine Eindeutigkeit im Binlog sicherzustellen.