Cause de la fragmentation
Le stockage de la table deviendra fragmenté à chaque fois qu'une ligne de contenu est supprimée, l'espace de ce segment sera fragmenté. deviendra vide, laissé vide, et un grand nombre d'opérations de suppression sur une période de temps rendront cet espace vide plus grand que l'espace utilisé pour stocker le contenu de la liste lors de l'exécution d'une opération d'insertion, MySQL essaiera d'utiliser l'espace vide ; , Cependant, si un certain espace vide n'a pas été occupé par des données de taille appropriée et qu'il ne peut toujours pas être complètement occupé, il sera fragmenté lorsque MySQL analysera les données, l'objet qu'il analyse correspond en fait à la limite supérieure de la capacité requise ; de la liste, c'est-à-dire les données La partie de la zone écrite qui est en position maximale ; dans cet article, nous partageons principalement avec vous les informations pertinentes sur les exemples de fragmentation de l'espace table de nettoyage MySQL. Nous espérons que cet article pourra aider tout le monde. , et les amis dans le besoin peuvent s'y référer.
Tutoriels vidéo MySQL recommandés : "Tutoriel MySQL"
Par exemple :
Une table contient 10 000 lignes, chaque ligne contient 10 mots La section occupera 100 000 octets d'espace de stockage. Si l'opération de suppression est effectuée, une seule ligne sera laissée. Le contenu réel ne fera que 10 octets. Cependant, lorsque MySQL le lira, il le traitera toujours comme une table de 100 000 octets. pour le traitement. Par conséquent, plus il y a de fragmentation, plus cela affectera les performances des requêtes.
Vérifiez la taille des fragments de la table
(1) Vérifiez la taille des fragments d'une certaine table
mysql> SHOW TABLE STATUS LIKE '表名';
La valeur de la colonne 'Data_free' dans le résultat est la taille du fragment
(2) Répertorier toutes les tables fragmentées
mysql> select table_schema db, table_name, data_free, engine from information_schema.tables where table_schema not in ('information_schema', 'mysql') and data_free > 0;
Effacer les fragments de table
(1) Table MyISAM
mysql> optimize table 表名
(2) Table InnoDB
mysql> alter table 表名 engine=InnoDB
Le moteur est différent, et le fonctionnement d'OPTIMIZE est également différent car l'index et les données sont séparés, OPTIMIZE peut s'organiser. et réorganiser les fichiers de données Index.
L'opération OPTIMIZE verrouillera temporairement la table, et plus la quantité de données est grande, plus cela prendra de temps. Après tout, ce n'est pas une simple opération de requête, donc elle est inappropriée. pour mettre la commande Optimiser dans le programme, quel que soit le niveau bas du taux de réussite, lorsque le nombre de visites augmente, le taux de réussite global augmentera également, ce qui aura certainement un grand impact sur l'efficacité de fonctionnement du programme . Une meilleure façon est d'être un shell et de vérifier régulièrement le champ mysql information_schema.TABLES, vérifiez le champ DATA_FREE, s'il est supérieur à 0, cela signifie qu'il y a une fragmentation
. Recommandation
L'opération de fragmentation claire verrouillera temporairement la table, la quantité de données. Plus la valeur est grande, plus cela prend de temps. Vous pouvez créer un script et l'exécuter régulièrement pendant des temps d'accès faibles. tôt le matin de chaque mercredi, vérifiez le champ DATA_FREE S'il est supérieur à la valeur d'avertissement que vous pensez, nettoyez-le une fois.
Recommandations associées :
Problème d'espace de table d'effacement mysql-MySQL (version 5.6)
Fragmentation du cache des requêtes MySQL, Cache taux de réussite et surveillance Nagios
Analyse des causes de fragmentation dans les tables mysql et nettoyage_Tutoriel PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!