Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fragmentation des tables Wordpress et MySQL

Il est possible que vous voyiez des statistiques incorrectes sur la taille du tableau.

MySQL 8.0 essaie de mettre en cache les statistiques sur les tables, mais il semble y avoir quelques bogues dans l'implémentation. Parfois, il affiche les statistiques de la table comme NULL, et parfois il affiche des valeurs, mais ne parvient pas à les mettre à jour lorsque vous modifiez les données de la table.

Voir https://bugs.mysql.com/bug.php?id=83957 par exemple, un bogue qui traite des problèmes liés à ce comportement de mise en cache.

Vous pouvez désactiver la mise en cache. Cela peut ralentir un peu les requêtes sur INFORMATION_SCHEMA ou SHOW TABLE STATUS, mais je suppose que ce n'est pas pire que dans les versions de MySQL antérieures à 8.0.

SET GLOBAL information_schema_stats_expiry = 0;

La valeur entière correspond au nombre de secondes pendant lesquelles MySQL conserve les statistiques en cache. Si vous interrogez les statistiques de la table, vous pouvez voir les anciennes valeurs du cache, jusqu'à ce qu'elles expirent et que MySQL les actualise en lisant à partir du moteur de stockage.

La valeur par défaut pour l'expiration du cache est 86400, soit 24 heures. Cela semble excessif.

Voir https://dev.mysql. com/doc/refman/8.0/en/server-system-variables.html#sysvar_information_schema_stats_expiry

Si vous pensez que Wordpress écrit sur la table, c'est peut-être le cas. Vous pouvez activer le journal binaire ou le journal des requêtes pour le savoir. Ou observez simplement SHOW PROCESSLIST pendant quelques minutes.

Vous pouvez avoir un plugin wordpress qui est fréquemment mis à jour ou inséré dans un tableau. Vous pouvez rechercher le dernier update_time :

SELECT * FROM INFORMATION_SCHEMA.TABLES
ORDER BY UPDATE_TIME DESC LIMIT 3;

Regardez ceci pour savoir quelles tables ont été écrites le plus récemment.

Il y a des mises en garde à cette statistique UPDATE_TIME. Il n'est pas toujours synchronisé avec les requêtes qui ont mis à jour la table, car les écritures dans les fichiers d'espace de table sont asynchrones. Lisez à ce sujet ici :https://dev.mysql. com/doc/refman/8.0/en/tables-table.html