Calcul de l'utilisation de l'espace disque par base de données MySQL
28
J'utilise actuellement information_schema.TABLES pour calculer l'utilisation totale de l'espace disque regroupé par nom de base de données, mais il fonctionne terriblement lentement. Sur des serveurs avec des centaines de bases de données, le calcul peut prendre quelques minutes.
Quelle est la méthode la plus rapide pour calculer l'utilisation de l'espace disque par base de données? Dois-je simplement regarder le système de fichiers? Existe-t-il une méthode pour accélérer le schéma d'information?
Si vous utilisez MyISAM, il est plus simple de simplement regarder le système de fichiers et de l'utiliser du -sh /var/lib/mysql/database.
Si vous utilisez InnoDB avec l' ensemble innodb_file_per_table , vous pouvez obtenir une réponse approximative en utilisant du -sh. C'est approximatif car il y a encore des données stockées dans le fichier ibdata1, donc vous serez un peu bas. Cette technique fonctionne également avec des innodb_file_per_tablebases de données mixtes MyISAM / InnoDB ( ).
Si vous utilisez InnoDB sans innodb_file_per_table set, vous devrez consulter INFORMATION_SCHEMA.
Dans tous les cas ci-dessus, vous pouvez exécuter la requête suivante pour obtenir les informations que vous recherchez.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Si vous avez un très grand nombre de tables, cela peut être lent, comme vous l'avez déjà découvert.
J'ai vu ailleurs que l'option 3 ne prend pas en compte les tailles VARCHAR.
Joe
3
Vous pouvez utiliser cette commande pour obtenir des informations en Go:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
OU pour inclure un espace libre / récupérable, utilisez:
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
L'espace peut être récupéré en utilisant commande OPTIMIZE TABLE pour les tables InnoDB, MyISAM et ARCHIVE.
Pour que je puisse voir où l'espace disque est utilisé (que ce soit dans une table mysql ou non), j'utilise ma fidèle commande "du". Voici un exemple où je trouve d'où tout l'espace est consommé.
Vous pouvez voir que la majorité de l'espace est utilisée par ce dossier. / mysql
Ce dossier contient des tableaux de données. Pour voir quelles tables occupent tout l'espace, vous pouvez procéder comme ceci en utilisant l'option "humain" ou "-h". J'aime faire la gestion de l'espace disque de cette façon car parfois vous ne pouvez même pas vous connecter à mysql parce que vous ne connaissez pas le mot de passe ou l'utilisateur.
Je chercherais la taille du fichier sur votre dictionnaire de données. C'est instantané et précis.
Attention : selon le moteur de stockage, les index sont stockés dans le fichier principal ou dans un autre fichier n'oubliez pas de les résumer si besoin.
Vous pouvez utiliser cette commande pour obtenir des informations en Go:
Adapté de la réponse d' Aaron Brown pour fournir la taille en Go. Voir la réponse d'Aaron Brown pour plus de détails.
OU pour inclure un espace libre / récupérable, utilisez:
L'espace peut être récupéré en utilisant commande OPTIMIZE TABLE pour les tables InnoDB, MyISAM et ARCHIVE.
Voir aussi Comment obtenir la vraie taille de la base de données MySQL? pour plus de détails.
la source
Pour obtenir des informations sur le nom de la table et le nombre d'enregistrements qu'elle contient, la requête ci-dessous peut être utilisée,
Pour obtenir des informations sur les bases de données sur les serveurs avec leur taille respective, la requête ci-dessous peut être utilisée,
la source
Pour que je puisse voir où l'espace disque est utilisé (que ce soit dans une table mysql ou non), j'utilise ma fidèle commande "du". Voici un exemple où je trouve d'où tout l'espace est consommé.
Vous pouvez voir que la majorité de l'espace est utilisée par ce dossier. / mysql
Ce dossier contient des tableaux de données. Pour voir quelles tables occupent tout l'espace, vous pouvez procéder comme ceci en utilisant l'option "humain" ou "-h". J'aime faire la gestion de l'espace disque de cette façon car parfois vous ne pouvez même pas vous connecter à mysql parce que vous ne connaissez pas le mot de passe ou l'utilisateur.
Vous pouvez voir que tout l'espace est occupé par quelques tables contenant de nombreux GiG de données. J'espère que cela t'aides.
la source
Je chercherais la taille du fichier sur votre dictionnaire de données. C'est instantané et précis.
Attention : selon le moteur de stockage, les index sont stockés dans le fichier principal ou dans un autre fichier n'oubliez pas de les résumer si besoin.
la source
Je sais que c'est vieux mais quelqu'un peut trouver cela pertinent.
Dans MySQL, j'utilise:
Puisque ma base de données est InnoDB, ce n'est qu'une estimation.
Je compare cette sortie à:
J'espère que cela vous aide
la source
Meilleur (après avoir fait
apt-get install ncdu
):pour obtenir toute la taille totale des bases de données Mysql dans votre VPS.
la source