Teil 5: MySQL 4 - Einplanungsmodifikatoren und Locking

SQL-Optimierung: Manuelles Priorisieren und Sperren

Sperrebenen und Nebenläufigkeit

Die oben beschriebenen Einplanungsmodifikatoren ermöglichen Ihnen die Änderung der Standardeinplanungsrichtlinien. Sie wurden in erster Linie eingeführt, um Probleme zu lösen, die sich in Zusammenhang mit Sperren auf Tabellenebene ergaben, mit deren Hilfe bei ISAM- und MyISAM-Tabellen der gleichzeitige Zugriff verwaltet wird.

Mittlerweile gibt es bei MySQL BDB- und InnoDB-Tabellen, die Sperren auf verschiedenen Ebenen ermöglichen und aufgrund dessen unterschiedliche Leistungscharakteristika aufweisen, was die Verwaltung des gleichzeitigen Zugriffs betrifft. Der BDB-Handler verwendet Sperren auf der Seitenebene, der InnoDBHandler auf Zeilenebene (wenn auch nur im benötigten Maße; oft verwendet InnoDB überhaupt keine Sperren, etwa wenn nur Lesevorgänge erfolgen).

Welche Sperrebene ein Tabellen-Handler verwendet, wirkt sich in hohem Maße auf die Nebenläufigkeit mehrerer Clients aus. Nehmen wir einmal an, zwei Clients wollen jeweils eine Zeile einer gegebenen Tabelle aktualisieren. Um die Aktualisierung durchführen zu können, benötigt jeder der Clients eine Schreibsperre. Bei einer MyISAM-Tabelle wird der Handler für den ersten Client eine Tabellensperre vornehmen, d. h., der zweite Client wird gesperrt, bis der erste seine Arbeit beendet hat.

Bei BDB-Tabellen können gleichzeitige Verbindungen eher vorhanden sein, da die Aktualisierungen gleichzeitig erfolgen können, sofern die betreffenden Zeilen nicht auf der gleichen Seite vorhanden sind. Bei InnoDB-Tabellen ist die Situation sogar noch besser: Die Aktualisierungen können gleichzeitig erfolgen, solange nicht beide Clients ein und dieselbe Zeile aktualisieren.