Was ist ein MySQL-Tablespace?

Was ist ein MySQL-Tablespace?

Das Thema, das ich heute mit Ihnen teilen möchte, lautet: „Was genau ist der Tabellenbereich, über den alle oft sprechen? Was genau ist eine Datentabelle?“

Dies ist eigentlich ein konzeptioneller Wissenspunkt, der als Wissenserweiterung betrachtet werden sollte. Sie müssen lediglich die zugrunde liegenden Konzepte verstehen und einen Eindruck von den beteiligten Parametern hinterlassen.

1. Was ist eine Tabelle?

Jeder, der MySQL verwendet hat, weiß intuitiv, dass MySQL-Daten in Datentabellen gespeichert werden.

Beispielsweise ein Update-SQL:

Benutzer aktualisieren, Benutzernamen = „Daydream“ festlegen, wobei ID = 999;

Es ändert die Spalte „Benutzername“ des Datensatzes mit der ID 1 in der Benutzerdatentabelle in „Daydream“.

Der Benutzer ist hier eigentlich eine Datentabelle. Darum geht es natürlich nicht. Ich möchte lediglich darauf hinweisen, dass die Datentabelle eigentlich ein logisches Konzept ist. Der unten besprochene Tabellenraum ist ein physikalisches Konzept.

2. Was ist ein Tablespace?

Ich weiß nicht, ob Sie diesen Satz schon einmal gesehen haben: „In der InnoDB-Speicher-Engine werden Daten gemäß Tablespaces organisiert und gespeichert.“ Tatsächlich gibt es einen Subtext: Der Tablespace ist eine Tablespace-Datei, die eine tatsächliche physische Datei ist.

Sie müssen sich keine Gedanken darüber machen, warum es Tablespace heißt oder warum der Tablespace einer physischen Datei auf der Festplatte entspricht, da MySQL auf diese Weise konzipiert und eingerichtet ist. Akzeptieren Sie das Konzept einfach direkt.

MySQL verfügt über viele Tablespace-Typen. Schauen wir sie uns gemeinsam an.

3. Sys-Tabellenbereich

Sie können Ihren MySQL-Systemtabellenbereich folgendermaßen anzeigen:

Der Wertteil besteht aus: Name:Größe:Attribute

Standardmäßig initialisiert MySQL eine Datei namens ibdata1 mit einer Größe von 12 MB und diese wird automatisch erweitert, wenn die Datenmenge zunimmt.

Diese ibdata1-Datei ist der Systemtabellenbereich, der Standardtabellenbereich, die physische Datei des Standardtabellenbereichs und der legendäre gemeinsam genutzte Tabellenbereich.

Was diesen gemeinsam genutzten Tabellenbereich betrifft, gilt intuitiv: Wenn dieser Tabellenbereich Daten für mehrere Tabellen speichern kann, kann er als gemeinsam genutzter Tabellenbereich bezeichnet werden. Sie können sich den Systemtabellenbereich also als einen gemeinsam genutzten Tabellenbereich vorstellen.

4. Konfigurieren Sie den Sys-Tablespace

Die Anzahl und Größe des Systemtabellenbereichs kann durch den Startparameter festgelegt werden: innodb_data_file_path

# meine.cnf
[mysqld]
innodb_data_file_path=/dir1/ibdata1:2000M;/dir2/ibdata2:2000M:autoextend

5. Datei pro Tabelle Tablespace

Wenn Sie möchten, dass jede Datenbanktabelle eine separate Tablespace-Datei hat, können Sie dies über den Parameter innodb_file_per_table festlegen.

Dieser Parameter ist nur in MySQL 5.6 oder höher verfügbar.

Über die Konfigurationsdatei

[mysqld]
innodb_file_per_table=EIN

Sie können auch den Befehl

mysql> GLOBAL SETZEN innodb_file_per_table=ON; 

Wenn Sie es auf „ON“ setzen, verfügen die von der InnoDB-Speicher-Engine generierten Tabellen über ihre eigenen unabhängigen Tablespace-Dateien.

Unabhängige Benennungsregeln für Tablespace-Dateien: Tabellenname.ibd

Beachten:

In einer unabhängigen Tablespace-Datei werden nur die der Tabelle entsprechenden Daten, der Index und die Einfügepuffer-Bitmap gespeichert.

Die restlichen Informationen, wie z. B. Rückgängig-Informationen, Einfügepuffer-Indexseite, doppelter Schreibpuffer usw., werden weiterhin im Standardtabellenbereich, d. h. im gemeinsam genutzten Tabellenbereich, abgelegt.

Es spielt keine Rolle, wenn Sie nicht verstehen, was Rückgängig-, Einfüge- und Doppelschreibpuffer sind. Gemäß dem groben Zeitplan werde ich den 41. und 42. Artikel mit Ihnen teilen. Hier müssen Sie nur verstehen, dass die Größe des gemeinsam genutzten Tabellenbereichs auch dann weiter zunimmt, wenn Sie innodb_file_per_table=ON festlegen, und dass die Größe des gemeinsam genutzten Tabellenbereichs nicht abnimmt, auch wenn Sie weiterhin Undo zum Zurücksetzen verwenden.

Schauen Sie sich meine Tablespace-Dateien an:

Abschließend wollen wir noch kurz die Vor- und Nachteile dieser Datei pro Tabelle beschreiben:

Vorteil:

  • Verbessern Sie die Fehlertoleranz. Wenn der Tablespace von Tabelle A beschädigt ist, sind andere Tablespaces davon nicht betroffen. S
  • Verwenden Sie MySQL Enterprise Backup, um Tabellen, die in File-per-Table-Table-Tablespaces erstellt wurden, schnell zu sichern oder wiederherzustellen, ohne die Nutzung anderer InnoDB-Tabellen zu unterbrechen.

Mangel:

Es ist nicht benutzerfreundlich für den Systemaufruf fsync. Wenn Sie eine Tablespace-Datei verwenden, kann ein einziger Systemaufruf die Datenlöschung abschließen, aber wenn Sie die Tablespace-Datei in mehrere aufteilen. Das ursprüngliche Fsync kann zu einem Fsync werden, das für alle beteiligten Tablespace-Dateien ausgeführt wird, wodurch sich die Anzahl der Fsyncs erhöht.

6. Temporärer Tabellenbereich

Der temporäre Tabellenbereich wird zum Speichern von von Benutzern erstellten temporären Tabellen und internen temporären Tabellen auf der Festplatte verwendet.

Der Parameter innodb_temp_data_file_path definiert einige der Namens-, Größen- und Spezifikationsattribute des temporären Tablespace wie unten gezeigt:

Zeigen Sie das Verzeichnis an, in dem temporäre Tablespace-Dateien gespeichert sind

7. Tablespace rückgängig machen

Ich glaube, Sie haben bestimmt schon von Undolog gehört. Wenn Ihr Programm eine Transaktion rückgängig machen möchte, hilft Ihnen das zugrunde liegende MySQL tatsächlich dabei, diese Undo-Informationen zu nutzen.

In den MySQL-Einstellungen gibt es einen Tabellenbereich, der speziell zum Speichern von Undolog-Protokolldateien verwendet werden kann.

In den MySQL-Einstellungen wird Undolog jedoch standardmäßig im Systemtabellenbereich platziert.

Wenn Ihr MySQL neu installiert ist, können Sie die Nutzung Ihres MySQL-Undo-Tablespace anzeigen, indem Sie den folgenden Befehl ausführen:

Wie Sie sehen, habe ich zwei Undo-Log-Tablespaces für MySQL.

Das heißt, mein Undo wird vom Standardsystem-Tabellenbereich in den dedizierten Tabellenbereich für das Undo-Protokoll übertragen.

Sollte das Undo-Protokoll also mit der Standardkonfiguration im Systemtabellenbereich platziert werden? Oder sollte es im Undo-Tabellenbereich platziert werden?

Dies hängt tatsächlich von der Art der vom Server verwendeten Speichervolumes ab.

Wenn SSD-Speicher verwendet wird, wird empfohlen, Undo-Informationen im Undo-Tablespace zu speichern.

Oben finden Sie detaillierte Informationen zum MySQL-Tablespace. Weitere Informationen zum MySQL-Tablespace finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL
  • Analysieren Sie die Ursachen und beseitigen Sie die Fragmentierung in MySQL-Tabellen.
  • Analyse der Prinzipien von MySQL Dirty Page Flush und Shrinking Table Space
  • Ausführliche Erläuterung zum Beispiel der MySQL InnoDB-Tablespace-Verschlüsselung
  • Mysql Online-Wiederherstellung des Undo-Tabellenbereichs tatsächlicher Kampfdatensätze
  • Detaillierte Analyse des temporären MySQL 5.7-Tablespace
  • So verwenden Sie das Entladen, Migrieren und Laden von MySQL InnoDB-Tablespaces
  • SQL-Anweisung zum Abfragen des von allen Datenbanken belegten Speicherplatzes und der Größe aller Tabellen in einer einzelnen Datenbank in MySQL
  • Das Konzept der MySQL-Tablespace-Fragmentierung und Lösungen für damit verbundene Probleme

<<:  Umfassendes Verständnis der Überwachung von HTML-Formulareingaben

>>:  So verwenden Sie async await elegant in JS

Artikel empfehlen

Javascript, um den Effekt des Schließens von Anzeigen zu erzielen

Hier ist eine Fallstudie zu Ihrer Information, wi...

Karusselleffekte mit JavaScript implementieren

In diesem Artikel wird der spezifische Code für J...

Docker-Praxis: Python-Anwendungscontainerisierung

1. Einleitung Container nutzen einen Sandbox-Mech...

So legen Sie in Linux eine feste IP fest (getestet und effektiv)

Öffnen Sie zunächst die virtuelle Maschine Öffnen...

Mysql implementiert drei Funktionen zum Feldspleißen

Beim Exportieren von Daten in Operationen ist das...

W3C Tutorial (12): W3C Soap Aktivität

Bei Webdiensten geht es um die Kommunikation zwis...

JavaScript-Tippspiel

In diesem Artikel wird der spezifische JavaScript...

Lernen Sie die Vue-Middleware-Pipeline in einem Artikel kennen

Beim Erstellen eines SPA müssen Sie häufig bestim...

Detaillierte Erklärung des HTML-Bereichs-Tags

Der <area>-Tag definiert einen Bereich in e...

MySQL-Datenbank Shell import_table Datenimport

Inhaltsverzeichnis MySQL Shell import_table Daten...

Analyse der Docker-Methode zum Erstellen lokaler Images

Der sogenannte Container erstellt tatsächlich ein...