web-dev-qa-db-fra.com

Qu'est-ce qu'un tablespace et pourquoi est-il utilisé?

En enquêtant sur un problème, je suis tombé sur cette erreur:

30503 [ERREUR] InnoDB: Tentative d'ouvrir un tablespace précédemment ouvert. L'espace de table précédent mysql/innodb_index_stats utilise l'espace ID: 2 dans chemin_fichier: ./mysql/innodb_index_stats.ibd. Impossible d'ouvrir le tablespace Mydb/be_command_log qui utilise l'espace ID: 2 dans chemin_fichier: ./Mydb/be_command_log.ibd

Après avoir lu quelques mots sur ce problème, je me suis rendu compte que c’était un problème connu de MySQL .

Mais mon problème est que je ne connais pas beaucoup le fonctionnement réel des tablespaces. Comment sont-ils utiles? J'ai lu cette définition , mais elle ne donne pas toutes les informations.

Quelqu'un peut-il partager des informations détaillées sur en quoi consistent les espaces de table et comment fonctionnent-ils?

18
Bhupesh Pant

Un fichier de données pouvant contenir des données pour une ou plusieurs tables InnoDB et les index associés.

Il existe de nombreux types d'espaces de table basés sur la configuration avec les informations stockées par table. Ceux-ci sont,

une. Espace de table système B. Fichier par espace de table C. Espace de table général

Le tablespace système contient ,

  1. Dictionnaire de données InnoDB.
  2. DoubleWrite Buffer.
  3. Changer de tampon
  4. Annuler les journaux.

En dehors de cela, il contient également,

  1. Les tables & 
  2. Données d'index 

Le fichier associé est .idbdata1

L'option innodb_file_per_table , activée par défaut dans MySQL 5.6 et versions ultérieures, permet de créer des tables dans des espaces table par table, avec un fichier de données distinct pour chaque table. L'activation de l'option innodb_file_per_table rend disponibles d'autres fonctionnalités de MySQL telles que la compression de table et les espaces de table transportables. 

Le fichier associé est .idbd

InnoDB a introduit les espaces de table généraux dans MySQL 5.7.6. Les espaces table généraux sont des espaces table partagés créés à l'aide de la syntaxe CREATE TABLESPACE. Ils peuvent être créés en dehors du répertoire de données MySQL, peuvent contenir plusieurs tables et prennent en charge des tables de tous les formats de lignes.

9
Bhupesh Pant

Par défaut, InnoDB ne contient qu'un seul espace de table, appelé espace de table système, dont l'identificateur est 0. Plusieurs espaces de table peuvent être créés indirectement à l'aide du paramètre de configuration innodb_file_per_table. Un tablespace consiste en une chaîne de fichiers. La taille des fichiers ne doit pas nécessairement être divisible par la taille de bloc de la base de données, car nous risquons de laisser le dernier bloc incomplet inutilisé. Lorsqu'un nouveau fichier est ajouté au tablespace, la taille maximale du fichier est également spécifiée. À l'heure actuelle, nous pensons qu'il est préférable d'étendre le fichier à sa taille maximale dès la création du fichier, car cela permet d'éviter une extension dynamique du fichier lorsque davantage d'espace est requis pour le tablespace. Les fichiers de données sont étendus de manière dynamique, mais les fichiers de journalisation sont pré-alloués. En outre, comme déjà mentionné précédemment, seul l’espace table peut contenir plusieurs fichiers de données. Il est également clairement indiqué que, même si le tablespace peut contenir plusieurs fichiers, ils sont considérés comme un seul grand fichier concaténé. L'ordre des fichiers dans l'espace de table est donc important.

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

3
Rukshan Hassim

MySQL Innodb TableSpace est un emplacement où se trouvent les données sur le disque nommé répertoire de données} _ (Par défaut "système de tablespace"). Exemple: 

"/ var/lib/mysql"

À partir de la version 5.6.6 de MySQL, un utilisateur peut créer et spécifier l'espace de table sur lequel il souhaite stocker les données, ce qui permet de traiter les processus de manipulation et de récupération de données. La fonctionnalité de fichier par table d’InnoDB propose à chaque table d’avoir des fichiers de données et d’index .ibd distincts représentant un espace de table général individuel. Pour que chaque table d’une base de données puisse pointer divers emplacements de répertoires de données .

Ex:

/home/{user}/test/data/{dbNameName/{tableNameName.ibd

/home/{user}/work/data/{dbNameName/{tableNameName.ibd

Pour plus d'informations sur l'espace de table fichier par table, reportez-vous à la section documentation mysql .

1
S.K. Venkat

les clients SQL ne doivent utiliser que des objets SQL et ne pas se préoccuper de l'endroit où le serveur de base de données stocke physiquement ces informations.

c'est pourquoi le concept de tablespace est nécessaire. Les objets SQL tels que les données de table sont placés dans un espace de table du point de vue du client SQL.

Les administrateurs du serveur de base de données sont maintenant libres de placer physiquement le tablespace où ils souhaitent aller physiquement. Les programmes client SQL fonctionnent toujours.

1
user2587106