MySql LOCK TABLEs Verstänsnisfrage

Anna Bolika

Erfahrenes Mitglied
Ich möchte in einem CMS/Forum die nested sets beim Anlegen/Verschieben von Seiten/Beiträgen neuberechnen. Da das nicht so furchtbar häufig vorkommt, würde ich gern auf Transactions verzichten und das meines Wissens nach etwas schnellere MyIsam-Format verwenden.

Meine Fragen:

1. Wenn ich eine Tabelle sperre (nur WRITE). Was geschieht dann mit Schreib-Befehlen, die inzwischen an die Datenbank gesandt werden. Sehe ich das richtig, dass die abgewiesen werden, oder kommen die in einen Buffer und werden nach dem UNLOCK automatisch ausgeführt?

2. Da ich mal von ersterem ausgehe: Ich habe nichts gefunden, um abzufragen, ob eine Tablelle geLOCKt wurde. Ist die einzige Möglichkeit dazu, die Fehlermeldung auszuwerten?

3. Da ein Forum ja kein Chat ist, gehe ich mal davon aus, dass dort nicht standardmäßig mehrere Inserts gleichzeitig abgeschossen werden. Ich hatte mir die Vorgehensweise so vorgestellt, dass ich die Tabelle locke, einen neuen Beitrag einfüge, ggf. die nested-set-daten neu berechne und sie wieder unlocke. Kommt ausgerechnet während diesem Vorgang - was ich als sehr seltenen Fall ansehe - ein weiterer Schreibvorgang, lass ich den einfach mit sleep() ne Zehntel-Sekunde warten und schicke ihn dann erneut ab. Wie skuril wirkt dies auf euch? :)

4. Warum kein InnoDB? Ich hatte mal versehentlich auf ner lokalen Testinstallation InnoDB-Tabellen erstellt. Daraufhin lief diese Installation wirklich erheblich langsamer. Da ich nur ein Forum/CMS habe, halte ich die Vorgehensweise (siehe 3.) für einen guten Kompromiss.

Naja. Wäre nett, wenn mir jemand nen Tipp gibt und mir die Meinung sagt :)
 
Ich weiss nicht wie es speziell MySQL handelt, aber andere mir bekannte Datenbanksysteme lassen das Query warten. Dauert das Lock zulange, läufst Du in einen Locktimeout.

Bei MyISAM wäre ich allerdings sehr vorsichtig, da afaik jeder Schreibzugriff zu einem impliziten Table-Lock führt. Somit können keine konkurrierenden Schreibzugriffe auf die Tabelle gemacht werden, was bei erhöhter Schreiblast zu einem Flaschenhals werden kann.

Bei einem mir bekannten Projekt wurde genau aus diesem Grund das Forum von ISAM nach InnoDB umgezogen.

Grüße,
gore
 
Zurück