web-dev-qa-db-fra.com

Table_Name.IBD La taille du fichier est en augmentation (entreprise MySQL 5.7.7) (moteurs Innodb)

J'utilise MySQL 5.7.17 Enterprise Edition en Rhel avec configuration Innodb_File_per_Table = ON.

Alors maintenant, j'ai 2 question:

  1. Au lieu d'un fichier IBD par table, je peux voir ibdata1, ib_logfile1, ib_logfile0 dans le répertoire de données qui se met à jour régulièrement. Cependant, ces fichiers ne sont pas de taille maximale mais collectivement, ces 3 fichiers consomment 15-20 GB. Ainsi, au lieu d'avoir un fichier IBD par table "ON", ces fichiers existent-ils toujours ou s'ils existent ce qu'ils contiennent, ce qui le rend actuellement mis à jour régulièrement?

  2. J'ai consacré 393 Go au répertoire de données. et un dossier de base de données occupe 293 Go uniquement. J'ai des fichiers table_name.ibd de taille 84 GB-100 GB. Y a-t-il une façon que je puisse vérifier si une mémoire reçoit des déchets? Et si cela devient des déchets, comment puis-je la récupérer?

J'ai rencontré des tables d'optimisation de quelques petites tables uniquement (cela a aidé) car si j'exécute cette commande pour les gros tables, j'ai besoin de plus d'espace avant d'utiliser Optimiser la commande car l'espace requis est TABLE_SIZE * 2.

J'ai déjà vérifié les tailles de table. Taille de la table et la taille du fichier IBD de la table respective varient avec une différence de 2 -3 Go.

Quelqu'un peut-il m'aider, que puis-je faire ici?

Devrais-je pointer le répertoire de données MySQL sur un nouveau chemin? Si c'est possible, comment puis-je faire cela?

Taille du fichier (en GB) en ordre décroissant: 93 33 19 17 16 14 14 13 11 11 9.2

1
Ankit Kapoor

theSaru a couvert la plupart des problèmes.

Il est imprudent de laisser l'espace libre du disque à déposer sous la taille de la plus grande table. De cette façon, vous devriez avoir la capacité de ALTER ou OPTIMIZE n'importe quelle table. (Vous avez apparemment allé bien au-delà de ce point de sécurité.)

ibdata1 continuera d'être modifiée, même avec innodb_file_per_table = ON. Il existe une variété de produits autres que les données et les index qui sont stockés là-bas. Le fichier peut parfois grandir de taille, mais il ne sera jamais rétrécir. Le seul moyen de réduire la rétractation est de faire une décharge complète et de recharger; pas agréable.

iblog* Fichiers (généralement 2 d'entre eux) sont nécessaires pour INNODB. Il y a des directives en vrac sur la taille de leur taille. Il est clair que vous n'avez pas de place pour augmenter leur taille. Sauf si vous avez une version vraiment nouvelle de MySQL, c'est une douleur de rétrécir leurs tailles. Mais cela est possible, il peut donc s'agir d'une mesure de désthaussement. L'inconvénient est une perte de performance (peut-être petite).

L'espace "libre" dans une table est avec précaution inexacte. On peut le trouver de SHOW TABLE STATUS ou information_schema.TABLES. PARTITIONed Les tables ont beaucoup plus d'espace "libre" que non partagée.

Vous avez utilisé OPTIMIZE TABLE commençant par le plus petit? Et maintenant tu ne peux pas faire le prochain? Eh bien, vous n'avez pas de chance. Déposer une table (s). Obtenez un plus grand disque (et migrer les données). Ou d'autres remèdes douloureux.

OTOH, regardons le schéma de la prochaine table la plus grande. Peut-être que certains index peuvent être DROPped. Peut-être qu'il utilise BIGINT lorsque INT suffirait (8 octets -> 4 octets). Etc. Si nous pouvons trouver suffisamment de nettoyages comme celui-ci, peut-être peut-être ALTER TABLE t MODIFY COLUMN ..., DROP INDEX ...; serait exécuté avec succès.

ALTER et OPTIMIZE copier la table et reconstruire les index. Ce faisant, il y a une chance que l'empreinte du disque soit plus grande qu'elle ne l'avait été. Ceux-ci ont tendance à faire pousser une table: insère avec un PRIMARY KEY moins que le max actuel; Mises à jour; Supprime.

0
Rick James