Physisch gesehen besteht eine InnoDB-Tabelle aus einer gemeinsam genutzten Tablespace-Datei (ibdata1), einer exklusiven Tablespace-Datei (ibd), einer Tabellenstrukturdatei (.frm) und Protokolldateien (Redo-Dateien usw.). 1. Tabellenstrukturdatei Wenn Sie eine Datentabelle in MySQL erstellen, gibt es für die entsprechende Tabelle eine .frm-Datei im Datenbankverzeichnis, das ihrem Datenverzeichnis entspricht. Die .frm-Datei wird verwendet, um die Metadateninformationen (Metainformationen) jeder Datentabelle zu speichern, einschließlich der Definition der Tabellenstruktur usw. Die .frm-Datei hat nichts mit der Datenbankspeicher-Engine zu tun, d. h. jede Datentabelle der Speicher-Engine muss eine .frm-Datei haben, die den Namen Datentabellenname.frm hat, z. B. user.frm. Die .frm-Datei kann verwendet werden, um die Tabellenstruktur wiederherzustellen, wenn die Datenbank abstürzt. 2. Tablespace-Dateien (1) Analyse der Tabellenbereichsstruktur Nachfolgend sehen Sie das Diagramm zur Tabellenbereichsstruktur von InnoDB: Das Datensegment ist der Blattknoten des B + -Baums, und das Indexsegment ist der Nicht-Blattknoten des B + -Baums. Die Verwaltung der InnoDB-Speicher-Engine wird von der Engine selbst abgeschlossen, und der Tabellenbereich besteht aus verstreuten Segmenten. Ein Segment enthält mehrere Bereiche. Ein Extent besteht aus 64 aufeinanderfolgenden Seiten mit einer Größe von jeweils 16 KB, d. h. jeder Extent ist 1 MB groß. Beim Erstellen einer neuen Tabelle werden zunächst 32-seitige Fragmente zum Speichern von Daten verwendet. Nachdem die Daten aufgebraucht sind, wird der Extent angewendet (InnoDB wendet bis zu 4 Extents gleichzeitig an, um die sequentielle Leistung der Daten sicherzustellen). (2) Exklusive Tablespace-Datei Wenn innodb_file_per_table aktiviert ist, generiert das System für jede Tabelle eine Datei table_name.ibd. In dieser Datei werden die Daten, Indizes und internen Datenwörterbuchinformationen gespeichert, die sich auf die Tabelle beziehen. (3) Gemeinsam genutzte Tablespace-Dateien In der InnoDB-Speicher-Engine ist die Standard-Tablespace-Datei ibdata1 (hauptsächlich zum Speichern gemeinsam genutzter Tablespace-Daten), die auf 10 MB initialisiert und erweiterbar ist, wie in der folgenden Abbildung dargestellt: Tatsächlich kann die InnoDB-Tablespace-Datei mit der folgenden Anweisung geändert werden: Innodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend Bei Verwendung der gemeinsam genutzten Tablespace-Speichermethode werden alle Innodb-Daten in einem separaten Tablespace gespeichert, der aus mehreren Dateien bestehen kann. Eine Tabelle kann mehrere Dateien umfassen, sodass ihre Größenbeschränkung nicht mehr die Dateigrößenbeschränkung, sondern ihre eigene Beschränkung ist. Aus der offiziellen Dokumentation von Innodb können wir ersehen, dass die maximale Grenze seines Tabellenspeicherplatzes 64 TB beträgt, d. h. die Einzeltabellengrenze von Innodb liegt grundsätzlich bei etwa 64 TB. Natürlich umfasst diese Größe alle Indizes dieser Tabelle und andere zugehörige Daten. Bei Verwendung eines separaten Tablespace-Speichers werden die Daten jeder Tabelle in einer separaten Datei gespeichert. Zu diesem Zeitpunkt wird die Beschränkung auf eine einzelne Tabelle zur Größenbeschränkung des Dateisystems. Nachfolgend sind die maximalen Größen einzelner Tablespace-Dateien auf verschiedenen Plattformen aufgeführt.
※ Folgendes stammt aus der MySQL-Dokumentation: Hinweis für Windows-Benutzer: FAT und VFAT (FAT32) sind nicht für den Produktionseinsatz von MySQL geeignet. Es sollte NTFS verwendet werden. (4) Gemeinsam genutzter Tablespace und exklusiver Tablespace Gemeinsam genutzte und exklusive Tablespaces beziehen sich auf die Art und Weise, wie Daten gespeichert werden. Shared Tablespace: Alle Tabellendaten und Indexdateien einer Datenbank werden in einer Datei abgelegt. Der Standarddateipfad dieses Shared Tablespace befindet sich im Datenverzeichnis. Der Standarddateiname lautet: ibdata1 und wird auf 10 M initialisiert. Exklusiver Tabellenbereich: Jede Tabelle wird in einer unabhängigen Datei (.ibd-Datei, die den Dateninhalt und den Indexinhalt einer einzelnen Tabelle enthält) generiert und gespeichert. 1) Speicherinhaltsvergleich Nach Verwendung des exklusiven Tablespace: Die Daten, Indizes und Einfügepuffer der einzelnen Tabellen werden in einem exklusiven Tablespace (.idb-Datei) gespeichert. Die Rückgängig-Informationen, Systemtransaktionsinformationen, sekundären Schreibpuffer usw., die jeder Tabelle entsprechen, werden weiterhin im ursprünglichen gemeinsam genutzten Tabellenbereich (Datei ibdata1) gespeichert. 2) Vergleich der Funktionen Die spezifischen Vor- und Nachteile von gemeinsam genutzten und unabhängigen Tablespaces sind wie folgt: Gemeinsam genutzter Tablespace: Vorteil: Der Tablespace kann in mehrere Dateien aufgeteilt und auf verschiedenen Datenträgern gespeichert werden (die Größe der Tablespace-Datei ist nicht durch die Größe der Tabelle beschränkt, eine Tabelle kann beispielsweise auf verschiedene Dateien verteilt werden). Daten und Dateien werden zur einfachen Verwaltung zusammengestellt. Mangel: Wenn alle Daten und Indizes in einer Datei gespeichert werden, entsteht eine sehr große Datei. Obwohl eine große Datei in mehrere kleine Dateien aufgeteilt werden kann, werden mehrere Tabellen und Indizes gemischt und im Tabellenbereich gespeichert. Auf diese Weise entstehen nach einer großen Anzahl von Löschvorgängen an einer Tabelle viele Lücken im Tabellenbereich. Insbesondere für Anwendungen wie statistische Analyse- und Protokollierungssysteme ist die Verwendung gemeinsam genutzter Tabellenbereiche am wenigsten geeignet. Unabhängiger Tablespace: (legen Sie innodb_file_per_table in der Konfigurationsdatei (my.cnf) fest) Vorteil:
Bei Tabellen, die unabhängige Tablespaces verwenden, wirkt sich die Fragmentierung des Tablespace unabhängig von der Art der Löschung nicht allzu stark auf die Leistung aus und es besteht immer noch eine Möglichkeit, das Problem zu beheben. a) Der Vorgang „Tabelle löschen“ gibt automatisch Tabellenspeicherplatz frei b) Wenn es sich um eine statistische Analyse oder eine Tageswerttabelle handelt, können Sie nach dem Löschen einer großen Datenmenge den ungenutzten Speicherplatz wie folgt verkleinern: alter table TableName engine=innodb; c) Bei Innodb mit Innodb-Plugin wird durch die Verwendung von Truncate Table auch der Speicherplatz verkleinert. 5. Wenn die Serverressourcen begrenzt sind und die Daten in einer einzelnen Tabelle nicht besonders groß sind, sind unabhängige Tablespaces offensichtlich effizienter als gemeinsam genutzte Tablespaces. MySQL verwendet jedoch standardmäßig gemeinsam genutzte Tablespaces. Mangel: Die Größe einer einzelnen Tabelle ist möglicherweise zu groß, beispielsweise über 100 GB. 3) Konvertierung zwischen gemeinsam genutztem Tablespace und exklusivem Tablespace Ändern Sie die exklusive leere Tablespace-Konfiguration und konfigurieren Sie die folgenden Parameter innodb_data_home_dir = "/user/local/mysql/var" Das Verzeichnis, in dem die Datenbankdateien gespeichert sind innodb_log_group_home_dir = "/user/local/mysql/var" Protokollspeicherverzeichnis innodb_data_file_path=ibdata1:10M:autoextend legt eine separate Datei (gemeinsam genutzte Datendatei) namens ibdata1 mit einer erweiterbaren Größe von 10 MB fest. Für die Datei ist kein Speicherort angegeben, daher ist die Standardeinstellung das MySQL-Datenverzeichnis. innodb_file_per_table=1 Gibt an, ob gemeinsam genutzter oder exklusiver Tablespace verwendet werden soll (1: exklusiver Tablespace verwendet werden, 0: gemeinsam genutzter Tablespace verwendet werden) Überprüfen Sie die Variable innodb_file_per_table. Wenn sie deaktiviert ist, bedeutet dies, dass ein gemeinsam genutzter Tablespace verwendet wird (standardmäßig wird ein gemeinsam genutzter Tablespace verwendet). Wenn innodb_file_per_table geändert wird, wirkt sich dies nicht auf den zuvor verwendeten gemeinsam genutzten Tabellenbereich aus, sofern es nicht manuell geändert wird. Beachten: InnoDB erstellt keine Verzeichnisse. Stellen Sie daher sicher, dass das konfigurierte Pfadverzeichnis vorhanden ist, bevor Sie den Server starten. Achten Sie beim Migrieren und Sichern von Daten auf die Integrität der Datendateien. Das könnte Sie auch interessieren:
|
<<: Von VirtualBox erstellte virtuelle Debian-Maschine teilt Dateien mit dem Windows-Host
>>: So kapseln Sie Axios in ein Vue-Projekt (einheitliche Verwaltung von HTTP-Anfragen)
Eigenschaft „letter-spacing“ : Vergrößern oder ve...
Schauen wir uns zunächst meine grundlegende Entwi...
Deshalb führen wir ein Einbettungsframework ein, u...
Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...
Heute stelle ich zwei HTML-Tags vor, die ich nich...
Inhaltsverzeichnis So benennen Sie eine MySQL-Dat...
Inhaltsverzeichnis Allgemeine Schlüsselaliase Sch...
In diesem System steht das #-Zeichen für den Root...
Beginnen wir nicht mit der Einleitung, sondern ko...
In diesem Artikel wird der spezifische JavaScript...
Beim Verschieben von Bausteinen treten verschiede...
Inhaltsverzeichnis Was ist ein Containerdatenvolu...
Es gibt viele MySQL-Variablen, von denen einige u...
Inhaltsverzeichnis 1. Vererbung der Prototypkette...
Grundlegende Einführung Merkmale Flexbox ist ein ...