Die in der Konfigurationsdatei definierten Datendateien bilden
den Tablespace von InnoDB
. Die Dateien werden
einfach aneinander gehängt, um diesen Tablespace zu bilden. Es
wird kein Striping verwendet. Zurzeit können Sie noch nicht
bestimmen, an welche Stelle des Tablespaces Ihre Tabellen
zugewiesen werden. Doch in einem neuen Tablespace wird der Platz
beginnend mit der ersten Datendatei zugewiesen.
Der Tablespace besteht aus Datenbankseiten mit einer
Standardgröße von 16KB. Die Seiten werden zu Extents von 64
aufeinander folgenden Seiten zusammengefasst. Die
„Dateien“ eines Tablespace nennt man in
InnoDB
Segmente. Der
Begriff „Rollback-Segment“ ist etwas irreführend,
da er in Wirklichkeit viele Tablespace-Segmente umfasst.
Für jeden Index in InnoDB
werden zwei
Segmente zugewiesen. eines für Nicht-Blattknoten und das andere
für Blattknoten des B-Baums. Dadurch wird eine bessere Abfolge
der Blattknoten, die die eigentlichen Daten enthalten, erreicht.
Wenn ein Segment im Tablespace anwächst, weist ihm
InnoDB
die ersten 32 Seiten einzeln zu, und
danach nur noch vollständige Extents. InnoDB
kann einem großen Segment bis zu 4 Extents zugleich zuweisen,
um eine gute Datensequenzialität zu gewährleisten.
Da manche Seiten im Tablespace Bitmaps anderer Seiten enthalten,
können einige Extents eines
InnoDB
-Tablespace den Segmenten nicht als
Ganzes, sondern nur in Form einzelner Seiten zugewiesen werden.
Wenn Sie mit einer SHOW TABLE
STATUS
-Anweisung fragen, wie viel Platz in einem
Tablespace noch frei ist, meldet InnoDB
nur
die Extents, die darin definitiv noch nicht belegt sind.
InnoDB
reserviert immer einige Extents für
die Reinigungsaufgaben und andere interne Zwecke. Diese
reservierten Extents sind in dem freien Platz nicht inbegriffen.
Wenn Sie Daten aus einer Tabelle löschen, kontrahiert
InnoDB
die entsprechenden B-Baum-Indizes. Ob
der frei gewordene Platz für ander Benutzer verfügbar wird,
hängt davon ab, ob das Löschungsmuster einzelne Seiten oder
ganze Extents des Tablespace freigibt. Wenn Sie eine Tabelle
oder alle in ihr befindlichen Zeilen löschen, dann wird
garantiert der Platz für andere Benutzer freigegeben, aber
vergessen Sie nicht, dass gelöschte Zeilen physikalisch erst in
einer (automatischen) Purge-Operation entfernt werden, wenn sie
auch für Transaktions-Rollbacks und konsistente Leseoperationen
nicht mehr gebraucht werden. (Siehe
Abschnitt 14.2.12, „Implementierung der Multiversionierung“.)
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.