
Anhang D: Anmerkungen zur Portierung auf andere Systeme 703
UPDATE tabelle SET spalte=wert WHERE eindeutige_schluessel_nummer
DELETE FROM tabelle WHERE eindeutiger_schluessel=#
• SELECT in Kombination mit INSERT (und sehr wenigen UPDATE’s und DELETE’s).
• Viele Scans / GROUP BY auf die gesamte Tabelle ohne irgend welche Schreibvorg¨ange.
Andere Optionen als Sperren auf Zeilen- / Seiten-Ebene:
Versionierung (wie die, die wir bei MySQL f¨ur gleichzeitige Einf¨ugevorg¨ange nutzen), bei
der man gleichzeitig einen Schreibvorgang haben kann, w¨ahrend viele Lesevorg¨ange stat-
tfinden. Das heißt, dass die Datenbank / Tabelle verschiedene Sichten der Daten un-
terst¨utzt, abh¨angig davon, wann man anfing, darauf zuzugreifen. Andere Namen hierf¨ur
sind Zeitreisen, Kopieren beim Schreiben (Copy on Write) oder Kopieren bei Bedarf (Copy
on Demand).
Kopieren bei Bedarf ist in vielen F¨allen viel besser als Sperren auf Seiten- oder Zeilenebene.
Im schlimmsten Fall wird jedoch viel mehr Speicher verbraucht als bei der Benutzung nor-
maler Sperren.
Anstelle von Zeilen-Sperren kann man Sperren auf Applikationsebene benutzen (wie
get lock/release lock in MySQL). Das funktioniert nat¨urlich nur bei ’wohl erzogenen’
Applikationen.
In vielen F¨allen kann man auf fortgeschrittene Art raten, welcher Sperrtyp der beste f¨ur die
Applikation ist, aber allgemein ist es sehr schwer zu sagen, dass ein bestimmter Sperrtyp
besser ist als ein anderer. Alles h¨angt von der Applikation ab, und verschiedene Teile der
Applikation k¨onnen nach unterschiedlichen Sperrtypen verlangen.
Hier sind einige Tipps zu Sperren in MySQL:
Bei Web-Applikation f¨uhren die meisten Applikationen viele SELECTs aus, sehr wenige
DELETEs, UPDATEs haupts¨achlich auf Schl¨ussel und INSERTs in einigen bestimmten
Tabellen. Die grundlegende Einrichtung von MySQL ist hierf¨ur BESTENS optimiert.
Gleichzeitige Benutzer sind kein Problem, solange man UPDATEs und SELECTs nicht
vermischt, die beide gleichzeitig viele Zeilen in derselben Tabelle untersuchen m¨ussen.
Wenn man INSERTs und DELETEs auf dieselbe Tabelle mischt, kann INSERT DELAYED eine
große Hilfe sein.
Man kann auch LOCK TABLES benutzen, um Dinge zu beschleunigen (viele UPDATEs in-
nerhalb einer einzelnen Sperre sind viel schneller als UPDATEs ohne Sperren). Daten in
unterschiedliche Tabellen aufteilen hilft hierbei auch.
Wenn Sie Geschwindigkeitsprobleme mit den Tabellensperren in MySQL bekommen, k¨onnen
Sie diese eventuell dadurch l¨osen, dass Sie Ihre Tabellen in BDB-Tabellen umwandeln. Siehe
Abschnitt 8.6 [BDB], Seite 522.
Der Optimierungsabschnitt dieses Handbuchs behandelt viele verschiedene Aspekte dessen,
wie man seine Applikationen optimieren kann. Siehe Abschnitt 6.2.11 [Tips], Seite 342.
D.5 Anmerkungen zu RTS-Thread
Ich habe versucht, die RTS-Thread-Pakete bei MySQL zu benutzen, bin aber ¨uber folgende
Probleme gestolpert:
Comentários a estes Manuais