Comment obtenir la taille réelle de la base de données MySQL?

144

Je voudrais savoir combien d'espace ma base de données MySQL utilise pour sélectionner un hébergeur. J'ai trouvé la commande SHOW TABLE STATUS LIKE 'table_name'alors quand je fais la requête, j'obtiens quelque chose comme ceci:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • les nombres sont arrondis.

Alors ai-je 362000 ou 400 * 362000 = 144800000 octets de données pour cette table? Et que signifie la longueur de l'index? Merci !

Marvin
la source
vous avez 362000 + 66560. Data_Length + Index Length
mandza
Cette page vous donnera la réponse exacte rathishkumar.in/2017/12/…
Rathish

Réponses:

281

De S. Prakash, trouvé sur le forum MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Ou sur une seule ligne pour faciliter le copier-coller:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 
ron_dobley
la source
7
Que signifie l'espace libre en Mo? J'ai 100 Go d'espace libre mais il rapporte moins de 1 Go d'espace libre.
Barth le
1
@Barth selon la documentation cela signifie "espace libre en octets pour les tables InnoDB". Malheureusement, il n'y a aucune explication de ce que cela signifie: - \
ckujau
13
L'espace libre en octets signifie exactement cela - cela signifie que la quantité d'espace pourrait être récupérée si vous OPTIMISEZ la table ou reconstruisez la table à partir de zéro. Lorsque les bases de données stockent des informations sur des disques, elles les allouent en blocs; la suppression d'un enregistrement libère souvent un bloc entre les blocs utilisés, et il est très coûteux de déplacer tous les autres blocs pour utiliser cet espace vers le haut afin qu'il soit marqué comme «libre». L'espace peut être utilisé plus tard par le moteur de base de données lui-même, ou peut être récupéré en utilisant OPTIMIZE TABLE foo(MyISAM), ou recréer + analyser pour les tables InnoDB.
razzed
92

Vous pouvez obtenir la taille de votre base de données Mysql en exécutant la commande suivante dans le client Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
minhas23
la source
30

Si vous utilisez phpMyAdmin, il peut vous fournir ces informations.

Allez simplement dans "Bases de données" (menu en haut) et cliquez sur "Activer les statistiques".

Vous verrez quelque chose comme ceci:

Capture d'écran de phpMyAdmin

Cela perdra probablement de la précision à mesure que les tailles augmenteront, mais cela devrait être suffisamment précis pour vos besoins.

Radu Murzea
la source
J'utilise actuellement 000webhost. Il a phpMyAdmin mais je n'ai pas trouvé de case à cocher "activer les statistiques". Y a-t-il (peut-être) une requête pour ça?
marvin
1
@marvin Eh bien, il est possible que l'hébergeur Web ait une ancienne version de phpMyAdmin installée. Je ne sais pas dans quelle version cette fonctionnalité a été introduite.
Radu Murzea
Dans votre barre latérale, cliquez sur l'icône Accueil en haut qui vous amène à la page d'accueil. Là, dans la fenêtre de droite, cliquez sur «Bases de données». Il affiche une table de bases de données à une colonne, ci-dessous un lien appelé `` Activer les statistiques ''
VeeK
8

si vous voulez le trouver en Mo, faites ceci

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 
Jakson
la source
L'extrait SQL de cette réponse semble être une copie de stackoverflow.com/a/1733523/1200542
Ariel Allon
3

Fondamentalement, il existe deux façons: interroger la base de données (longueur des données + longueur d'index) ou vérifier la taille des fichiers. La longueur de l'index est liée aux données stockées dans les index.

Tout est décrit ici:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

MiGro
la source
Eh bien, cette page est la source de ma question. Mais selon cette requête, j'ai 0,5 Mo, ce qui me laisse assez sûr. J'espère que c'est vrai :) Merci!
marvin
0

Aucune des réponses n'inclut la taille des frais généraux et la taille des métadonnées des tableaux.

Voici une estimation plus précise de «l'espace disque» alloué par une base de données.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Semra
la source
5
Pourriez-vous élaborer? Surtout vos constantes 300et 150?
Melebius
S'il vous plaît, pourriez-vous élaborer?
Allan Andrade
0

SUM(Data_free) peut être valide ou non . Cela dépend de l'histoire de innodb_file_per_table. Plus de discussion se trouve ici .

Rick James
la source
0

Si vous utilisez MySql Workbench, il est très facile d'obtenir tous les détails sur la taille de la base de données, la taille de chaque table, la taille de l'index, etc.

  1. Faites un clic droit sur le schéma
  2. Sélectionnez l' option Inspecteur de schéma

    entrez la description de l'image ici

  3. Il montre tous les détails de la taille du schéma

  4. Sélectionnez l' onglet Tables pour voir la taille de chaque table.

    entrez la description de l'image ici

  5. Taille de la table affichée dans la colonne Longueur des données

Viraj Dhamal
la source
0

Si vous voulez trouver la taille de toutes les bases de données MySQL, utilisez cette commande, elle affichera leurs tailles respectives en mégaoctets;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Si vous disposez de bases de données volumineuses, vous pouvez utiliser la commande suivante pour afficher le résultat en gigaoctets;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Si vous souhaitez afficher uniquement la taille d'une base de données spécifique, par exemple YOUR_DATABASE_NAME, vous pouvez utiliser la requête suivante;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Arbab Nazar
la source