web-dev-qa-db-fra.com

Quelle est la base d'une base de données MySQL par rapport au fichier de vidage?

Je restaure un dépotoir de 52 Go à une base de données MySQL. Le fichier ibdata1 a déjà dépassé la taille du fichier de vidage et la restauration est toujours incomplète. Existe-t-il un moyen d'estimer la taille finale du fichier ibdata1 si la taille du fichier de vidage MySQL est connue?

7
aetodd

Juste des mots de votre question, je suppose que ce qui suit: vous avez probablement ((( innodb_file_per_table Désactivé.

Remarque: les informations suivantes sont basées sur innodb_file_per_table étant désactivé.

Lorsque vous insérez des données dans des tables innovées, tout et sa grand-mère atterrissent dans le fichier de tables de table, mieux connu sous le nom d'IBDATA1. Que contient-il ibdata1?

  • Données de table
  • Index de table
  • Métadonnées
  • Info MVCC

Données de table et index tout en flagrant initialement ibdata1. Les métadonnées sont simplement simplement le dictionnaire de données + la liste de tablepace_ids attribue sur une base de table.

Qu'en est-il ((( MVCC (contrôle de la concurrence multiversion) ? Cela représente les objets SYSTREM conçus pour prendre en charge l'isolation des transactions, les retombées, les journaux annulaires, les tampons d'insertion pour les index de secondayr et le tampon à double écriture.

Vous devez nettoyer l'infrastructure innodub. J'ai déjà écrit des messages Stackexchange sur la façon dont et pourquoi faire ceci:

Revenez à votre question initiale, le seul moyen d'estimer la taille de l'IBDATA1 sur Recharge aurait été d'exécuter cette requête avant le MySqldump:

SELECT
    data_length/power(1024,3) InnoDBData,
    index_length/power(1024,3) InnoDBIndexes,
    (data_length+index_length)/power(1024,3) InnoDBSize
FROM
    information_schema.tables
WHERE
    engine='InnoDB';

Cela signalera la taille des données en GB. Sur une nouvelle recharge de l'ibdata1 (avec Innodb_File_Per_Table Désactivé dans votre cas), cela aurait été la règle de base de l'estimation de la taille.

À partir de la taille du fichier de vidage, il est difficile de juger parce que la taille totale combinée des pages de données et des pages d'index peut-être beaucoup moins que la taille de ibdata1 le décharge a été créée à partir de. Cette différence aurait des restes d'espace de la ballonnement des objets système MVCC (segments de restauration, des journaux annulaires, tampon à double écriture, tampon d'index secondaire). D'une autre perspective, les pages de données pourraient dépasser les pages d'index et inversement. Cela pourrait être dû à trop d'index, de mauvais design ou juste une quantité judicieuse de données.

6
RolandoMySQLDBA