Hallo Mike,
in der ersten Nachricht schreibst Du:
20:31:30 UHR
Thread1:
Select * From Tabelle1;
20:31:31 Uhr
Thread2:
Lock Tabelle1 WRITE;
Update something ....;
Unlock Tables;
Warum brauchst du den LOCK auf die Tabelle? Wenn Du InnodB benutzt, brauchst Du keinen LOCK. LOCK sperrt die gesamte Tabelle. Ein
SELECT * FROM tabelle WHERE x=1 FOR UPDATE
sperrt nur einen Datensatz.
Siehe auch..
13.4.5. LOCK TABLES und UNLOCK TABLES
Beachten Sie die folgenden Angaben zur Verwendung von LOCK TABLES bei transaktionssicheren Tabellen:
• LOCK TABLES ist nicht transaktionssicher und übergibt implizit alle aktiven Transaktionen, bevor versucht wird, die Sperre
für die Tabelle zu erwirken. Auch das Starten einer Transaktion (z. B. bei START TRANSACTION) führt implizit eine
UNLOCK TABLES-Anweisung aus. (Siehe auch Abschnitt 13.4.3, Anweisungen, die implizite Commits verursachen“.)
...
...
Letztlich müssen die einzelnen Threads möglichst schnell sein beim Abarbeiten der Datenbankzugriffe. Ob eine SQL-Abfrage schnell ist, kann mit EXPLAIN geprüft werden.
Mir ist nicht klar,wie ich jetzt noch helfen kann.
Grüße
Thomas