Teil 5: MySQL 4 - Einplanungsmodifikatoren und Locking

SQL-Optimierung: Manuelles Priorisieren und Sperren

Exklusiver Zugriff

Ein Client, der eine Schreiboperation ausführt, braucht eine Sperre für den exklusiven Zugriff auf die Tabelle. Die Tabelle befindet sich während der Ausführung der Operation in einem inkonsistenten Status, weil der Datensatz gelöscht, hinzugefügt oder geändert wird und möglicherweise alle Indizes für die Tabelle aktualisiert werden müssen. Wenn man anderen Clients erlaubt, während dieses Zustands auf die Tabelle zuzugreifen, können Probleme auftreten.

Offensichtlich ist es nicht ratsam, zwei Clients gleichzeitig zu gestatten, in die Tabelle zu schreiben, weil die Tabelle damit sehr schnell derart durcheinander geraten würde, dass die darin abgelegten Daten nicht mehr brauchbar wären. Es ist aber auch nicht sinnvoll, einem Client zu erlauben, eine gerade veränderte Tabelle zu lesen, weil sie sich genau zum Zeitpunkt des Lesens ändern könnte und die Ergebnisse damit nicht korrekt wären.

Ein Client, der eine Leseoperation ausführt, braucht eine Sperre, die andere Clients daran hindert, in die Tabelle zu schreiben, sodass diese sich nicht ändert, während sie gelesen wird. Die Sperre muss beim Lesen jedoch nicht exklusiv sein; sie kann anderen Clients erlauben, die Tabelle ebenfalls zu lesen. Beim Lesen wird die Tabelle nicht geändert, es gibt also keinen Grund, warum andere Leser nicht gleichzeitig auf die Tabelle zugreifen sollten.