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 déjà ouvert. Précédent tablespace mysql / innodb_index_stats utilise l'espace ID: 2 à filepath:./ mysql / innodb_index_stats.mici. Ne peut pas ouvrir tablespace Mydb / be_command_log qui utilise l'espace ID: 2 à filepath: ./Mydb / be_command_log.mici

après avoir lu un peu de ce numéro, je me suis rendu compte que c'était un numéro connu de MySQL.

mais mon problème est que je ne sais pas grand chose sur la façon dont les tablespaces fonctionnent vraiment. Comment sont-ils utiles? J'ai lu cette définition, mais il ne donne pas toutes les informations.

quelqu'un Peut-il partager quelques informations détaillées sur quels sont les tablespaces et comment fonctionnent-ils?

16
demandé sur Cy Rossignol 2016-06-14 10:13:52

4 réponses

un fichier de données qui peut contenir des données pour une ou plusieurs tables InnoDB et les index associés.

il existe de nombreux types de tablespaces basés sur la configuration W. R. T le nombre de boîtes de nuit par table. Ce sont,

tablespace système contient,

  1. InnoDB dictionnaire de données.
  2. Tampon DoubleWrite.
  3. Changement tampon
  4. Annuler Les Logs.

en dehors de cela, il contient aussi,

  1. Tables &
  2. Index

le fichier associé est .idbdata1

l'option innodb_file_per_table, qui est activé par défaut dans MySQL 5.6 et supérieur, permet de créer des tables dans des tablespaces fichier-par-table, avec un fichier de données séparé pour chaque table. Activer l'option innodb_file_per_table rend disponible D'autres fonctionnalités MySQL telles que la compression de table et les espaces de table transportables.

le fichier associé est .idbd

InnoDB introduit les tablespaces généraux in MySQL 5.7.6. Les tablespaces généraux sont des tablespaces partagés créés en utilisant la syntaxe CREATE TABLESPACE. Ils peuvent être créés en dehors du répertoire de données MySQL, sont capables de contenir plusieurs tables, et prennent en charge les tables de tous les formats de lignes.

6
répondu Bhupesh Pant 2016-08-24 07:12:29

par défaut, InnoDB ne contient qu'un seul tablespace appelé tablespace système dont l'identifiant est 0. Il est possible de créer plus de tablespaces indirectement en utilisant le paramètre de configuration innodb_file_per_table. Un tablespace se compose d'une chaîne de fichiers. La taille des fichiers n'a pas besoin d'être divisible par la taille du bloc de base de données, car nous pouvons simplement laisser le dernier bloc incomplet inutilisé. Lorsqu'un nouveau fichier est ajouté à l'espace de stockage, la taille maximale du fichier est également spécifié. À l' instant, nous pensons qu'il est préférable d'étendre le fichier à sa taille maximale, déjà lors de la création du fichier, car alors on peut les éviter de manière dynamique l'extension de fichier lorsque plus d'espace est nécessaire pour le tablespace. Les fichiers de données sont étendus dynamiquement, mais les fichiers journaux sont pré-alloués. Aussi, comme déjà mentionné précédemment, seul le système tablespace peut avoir plus d'un fichier de données. Il est également clairement mentionné que même si l'espace de tablature peut avoir plusieurs fichiers, ils sont considérés comme un seul gros fichier concaténé. Donc, l'ordre des fichiers dans l'espace de table est important.

https://blogs.oracle.com/mysqlinnodb/entry/data_organization_in_innodb

3
répondu Rukshan Hassim 2016-06-14 14:25:26

MySQL Innodb TableSpace est un emplacement où les données résident dans le disque appelé répertoire de données (Par défaut "système 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 qu'il veut stocker les données qui permettent le débit de la manipulation de données et le processus de récupération. La fonctionnalité file-per-table d'InnoDB offre à chaque table séparée de .mici données et fichiers d'index qui représentent une tablespace générale individuelle. Pour que chaque table dans une base de données puisse pointer divers endroits de répertoires de données.

Ex:

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

/home/{user}/travail/data/{dbName}/{tableName}.mici

pour en savoir plus sur l'espace de table file-per-table, reportez-vous à documentation de mysql.

1
répondu S.K. Venkat 2016-06-22 10:02:25

les clients sql ne doivent utiliser que des objets sql et ne doivent 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 l'espace est nécessaire. les objets sql comme les données de table vont dans un tablespace du point de vue du client sql.

les administrateurs de serveur de bases de données sont maintenant libres de placer physiquement l'espace de table où ils veulent qu'il aille physiquement, les programmes de client sql fonctionnent toujours.

1
répondu user2587106 2016-06-24 12:25:01