
Kapitel 6: MySQL-Optimierung 347
• Ein Thread wartet bei etwas wie Platte voll. In diesem Fall warten alle anderen
Threads, die auf die problemverursachende Tabelle zugreifen wollen, bis mehr Speicher
verf¨ugbar gemacht wurde.
M¨ogliche L¨osungen dieses Problems sind:
• Versuchen Sie, SELECT-Statements schneller ablaufen zu lassen. Hierf¨ur m¨ussen Sie
eventuell Zusammenfassungstabellen erzeugen.
• Starten Sie mysqld mit --low-priority-updates. Das gibt allen Statements, die
eine Tabelle aktualisieren (¨andern), geringere Priorit¨at als einem SELECT-Statement.
Im vorstehenden Szenario w¨urde das SELECT-Statement vor dem INSERT-Statement
ausgef¨uhrt werden.
• Sie k¨onnen auch einem bestimmten INSERT-, UPDATE- oder DELETE-Statement mit dem
LOW_PRIORITY-Attribut geringere Priorit¨at geben.
• Starten Sie mysqld mit einem niedrigen Wert f¨ur max write lock count, um READ-
Sperren nach einer bestimmten Anzahl von WRITE-Sp erren zu erm¨oglichen.
• Sie k¨onnen festlegen, dass alle Aktualisierungen von einem bestimmten Thread
mit niedriger Priorit¨at ausgef¨uhrt werden, indem Sie den SQL-Befehl SET
SQL_LOW_PRIORITY_UPDATES=1 benutzen. Siehe Abschnitt 6.5.6 [SET OPTION],
Seite 361.
• Sie k¨onnen mit dem HIGH_PRIORITY-Attribut festlegen, dass ein bestimmtes SELECT
sehr wichtig ist. Siehe Abschnitt 7.4.1 [SELECT], Seite 435.
• Wenn Sie Probleme mit INSERT in Kombination mit SELECT haben, stellen Sie auf die
neuen MyISAM-Tabellen um, weil diese gleichzeitige SELECTs und INSERTs unterst¨utzen.
• Wenn Sie haupts¨achlich INSERT- und SELECT-Statements mischen, wird das DELAYED-
Attribut f¨ur INSERT wahrscheinlich Ihre Probleme l¨osen. Siehe Abschnitt 7.4.3
[INSERT], Seite 442.
• Wenn Sie Probleme mit SELECT und DELETE haben, mag die LIMIT-Option f¨ur DELETE
helfen. Siehe Abschnitt 7.4.6 [DELETE], Seite 446.
6.4 Optimierung der Datenbank-Struktur
6.4.1 MySQL-Datenbank-Design-
¨
Uberlegungen
MySQL speichert Zeilendaten und Indexdaten in separaten Dateien. Viele (fast alle) an-
deren Datenbanken vermischen Zeilen- und Indexdaten in derselben Datei. Wir glauben,
dass die Wahl, die MySQL getroffen hat, f¨ur einen sehr weiten Bereich moderner Systeme
besser ist.
Eine weitere M¨oglichkeit, Zeilendaten zu speichern, besteht darin, die Information f¨ur jede
Spalten in einem separaten Bereich zu halten (Beispiele sind SDBM und Focus). Das
verursacht Performance-Einbussen f¨ur jede Anfrage, die auf mehr als eine Spalte zugreift.
Weil das so schnell schlechter wird, wenn auf mehr als eine Spalte zugegriffen wird, glauben
wir, dass dieses Modell f¨ur Mehrzweck-Datenbanken nicht gut ist.
Der h¨aufigere Fall ist, dass Index und Daten zusammen gespeichert sind (wie bei Oracle,
Sybase usw.). In diesem Fall befindet sich die Zeileninformation auf der Leaf-Page des
Kommentare zu diesen Handbüchern