it-swarm.com.de

Was ist ein Tablespace und warum wird er verwendet?

Bei der Untersuchung eines Problems bin ich auf diesen Fehler gestoßen:

30503 [ERROR] InnoDB: Es wurde versucht, einen zuvor geöffneten Tabellenbereich zu öffnen. Der vorherige Tabellenbereich mysql/innodb_index_stats verwendet die Speicherplatz-ID: 2 im Dateipfad: ./mysql/innodb_index_stats.ibd. Der Tabellenbereich Mydb/be_command_log, der die Speicherplatz-ID: 2 verwendet, kann nicht geöffnet werden: Dateipfad: ./Mydb/be_command_log.ibd

Nachdem ich etwas über dieses Problem gelesen hatte, erfuhr ich, dass dies ein bekanntes Problem von MySQL ist.

Aber mein Problem ist, dass ich nicht viel darüber weiß, wie Tablespaces wirklich funktionieren. Wie sind sie nützlich Ich lese diese Definition , aber es gibt nicht alle Informationen.

Kann jemand detaillierte Informationen über geben, was Tabellenbereiche sind und wie funktionieren sie?

18
Bhupesh Pant

Eine Datendatei, die Daten für eine oder mehrere InnoDB-Tabellen und zugehörige Indizes enthalten kann.

Es gibt viele Arten von Tablespaces, die auf der Konfiguration der Informationsclubs pro Tabelle basieren. Diese sind,

ein. Systemtabellenbereich B. Datei pro Tabellenbereich C. Allgemeiner Tabellenbereich

System Tablespace enthält ,

  1. InnoDB-Datenwörterbuch.
  2. DoubleWrite-Puffer.
  3. Puffer wechseln
  4. Protokolle rückgängig machen.

Abgesehen davon enthält es auch

  1. Tische & 
  2. Indexdaten 

Zugeordnete Datei ist .idbdata1

Die Option innodb_file_per_table , die in MySQL 5.6 und höher standardmäßig aktiviert ist, ermöglicht das Erstellen von Tabellen in Tabellenbereichen für Datei-pro-Tabelle mit einer separaten Datendatei für jede Tabelle. Durch die Aktivierung der Option innodb_file_per_table werden weitere MySQL-Funktionen wie Tabellenkomprimierung und transportierbare Tablespaces verfügbar. 

Zugeordnete Datei ist .idbd

InnoDB führte allgemeine Tablespaces ein in MySQL 5.7.6. Allgemeine Tablespaces sind gemeinsam genutzte Tablespaces, die mit der CREATE TABLESPACE-Syntax erstellt wurden. Sie können außerhalb des MySQL-Datenverzeichnisses erstellt werden, können mehrere Tabellen enthalten und unterstützen Tabellen aller Zeilenformate.

9
Bhupesh Pant

InnoDB enthält standardmäßig nur einen Tabellenbereich, den Systemtabellenbereich mit der Kennung 0. Weitere Tabellenbereiche können indirekt mit dem Konfigurationsparameter innodb_file_per_table erstellt werden. Ein Tablespace besteht aus einer Dateikette. Die Größe der Dateien muss nicht durch die Datenbankblockgröße teilbar sein, da der letzte unvollständige Block möglicherweise nicht verwendet wird. Wenn eine neue Datei an den Tablespace angehängt wird, wird auch die maximale Größe der Datei angegeben. Im Moment denken wir, dass es am besten ist, die Datei bereits beim Erstellen der Datei auf ihre maximale Größe zu erweitern, da wir die dynamische Erweiterung dann vermeiden können, wenn mehr Platz für den Tabellenbereich benötigt wird. Datendateien werden dynamisch erweitert, Redo-Log-Dateien sind jedoch vorbelegt. Wie bereits erwähnt, kann nur der Systemtabellenbereich mehrere Datendateien enthalten. Es wird auch klar erwähnt, dass der Tablespace zwar mehrere Dateien enthalten kann, sie jedoch als eine einzige große Datei betrachtet werden, die miteinander verkettet ist. Die Reihenfolge der Dateien innerhalb des Tabellenbereichs ist daher wichtig.

Von https://blogs.Oracle.com/mysqlinnodb/entry/data_organization_in_innodb

3
Rukshan Hassim

MySQL Innodb TableSpace ist ein Ort, an dem sich die Daten auf der Festplatte befinden, die Datenverzeichnis (standardmäßig "System Tablespace") heißt. Beispiel: 

"/ var/lib/mysql"

Ab MySQL Version 5.6.6 kann ein Benutzer den Tabellenbereich erstellen und angeben, in dem die Daten gespeichert werden sollen. Dies ermöglicht den Durchsatz des Datenbearbeitungs- und -wiederherstellungsprozesses. Die Datei-pro-Tabelle-Funktion von InnoDB bietet für jede Tabelle separate .ibd -Daten- und -Indexdateien, die einen einzelnen allgemeinen Tabellenbereich darstellen. Damit kann jede Tabelle in einer Datenbank auf verschiedene Speicherorte von Datenverzeichnissen zeigen.

Ex :

/home/{user}/test/data/{dbName}/{tableName}.ibd

/home/{user}/work/data/{dbName}/{tableName}.ibd

Weitere Informationen zum Tabellenbereich "Datei pro Tabelle" finden Sie in dieser mysql-Dokumentation .

1
S.K. Venkat

sQL-Clients verwenden nur SQL-Objekte und kümmern sich nicht darum, wo der Datenbankserver diese Informationen physisch speichert.

daher ist das Konzept des Tablespaces erforderlich. SQL-Objekte wie Tabellendaten werden aus Sicht des SQL-Clients in einen Tablespace eingefügt.

Die Db-Server-Admins können jetzt den Tablespace physisch an der gewünschten Stelle platzieren. Die SQL-Client-Programme funktionieren weiterhin.

1
user2587106