520 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
8.5.12.2 Speicherplatzverwaltung
Die Daten-Dateien, die Sie in der Konfigurationsdatei definieren, formen den Tabellenplatz
(Tablespace) von InnoDB. Die Dateien werden einfach verkettet, um den Tabellenplatz
(Tablespace) zu formen, es wird kein Striping benutzt. Momentan k¨onnen Sie nicht direkt
angeben, wo der Platz f¨ur Ihre Tabellen zugewiesen werden soll, ausser wenn Sie folgende
Tatsache benutzen: InnoDB weist Speicherplatz von einem neu erzeugten Tabellenplatz
(Tablespace) vom niedrigen Ende ausgehend zu.
Der Tabellenplatz (Tablespace) besteht aus Datenbankseiten, deren vorgabem¨aßige Gr¨oße
16 KB betr¨agt. Diese Seiten werden bis zu einer Ausdehnung von 64 aufeinander folgen-
den Seiten gruppiert. Die ’Dateien’ innerhalb eines Tabellenplatzes (Tablespace) werden
in InnoDB Segmente genannt. Der Name des Rollback-Segments ist in gewisser Hinsicht
irref¨uhrend, weil dieses tats¨achlich viele Segmente im Tabellenplatz enth¨alt.
F¨ur jeden Index in InnoDB werden zwei Segmente zugewiesen: eins f¨ur die Nicht-Bl¨atter-
Knoten (Non-Leaf-Nodes) des B-Baum, das andere f¨ur die Bl¨atter-Knoten. Die Idee dahin-
ter ist, f¨ur die Bl¨atter-Knoten, die die Daten enthalten, bessere Sequentialit¨at zu erzielen.
Wenn ein Segment innerhalb des Tabellenplatzes anw¨achst, weist ihm InnoDB die ersten
32 Seiten individuell zu. Danach f¨angt InnoDB an, dem Segment ganze Ausdehnungen
zuzuweisen. InnoDB kann einem großen Segment bis zu vier Ausdehnungen auf einmal
hinzuf¨ugen, um gute Sequentialit¨at f¨ur die Daten sicherzustellen.
Einige Seiten im Tabellenplatz enthalten Bitmaps anderer Seiten. Daher k¨onnen einige
Ausdehnungen in einem InnoDB-Tabellenplatz (Tablespace) nicht Segmenten als Ganzes
zugewiesen werden, sondern nur als individuelle Seiten.
Wenn Sie eine Anfrage SHOW TABLE STATUS FROM ... LIKE ... ausf¨uhren, um den
verf¨ugbaren freien Platz im Tabellenplatz festzustellen, berichtet InnoDB den Platz, der
in v¨ollig freien Ausdehnungen im Tabellenplatz sicher benutzt werden kann. InnoDB
reserviert immer einige Ausdehnungen f¨ur S¨auberungs- und interne Zwecke. Diese
Ausdehnungen werden nicht in den freien Platz einbezogen.
Wenn Sie Daten aus einer Tabelle l¨oschen, zieht InnoDB die entsprechenden B-Baum-Indexe
zusammen. Es h¨angt vom Schema der L¨oschvorg¨ange ab, ob das individuelle Seiten oder
Ausdehnungen im Tabellenplatz freigibt, so dass der freigegebene Platz anderen Benutzern
zur Verf¨ugung steht. Wenn eine Tabelle gel¨oscht wird oder alle Zeilen aus ihr gel¨oscht
werden, gibt das garantiert Platz frei f¨ur andere Benutzer, aber denken Sie daran, dass
gel¨oschte Zeile physikalisch nur durch eine Purge-Operation entfernt werden k¨onnen, nach-
dem Sie nicht mehr f¨ur ein Transaktions-Rollback oder f¨ur Konsistentes Lesen ben¨otigt
werden.
8.5.12.3 Eine Tabelle defragmentieren
Wenn es wahlfreie (random) Einf¨uge- oder L¨oschvorg¨ange in die Indexe einer Tabelle gibt,
k¨onnen die Indexe fragmentiert werden. Unter Fragmentierung verstehen wird, dass die
physikalische Reihenfolge der Index-Seiten auf der Platte der alphabetischen Reihenfolge
der Datens¨atze auf den Seiten nicht nahe kommt oder dass es viele unbenutzte Seiten in
den 64-Seiten-Bl¨ocken gibt, die dem Index zugewiesen wurden.
Komentarze do niniejszej Instrukcji