Question Comment obtenir les tailles des tables d'une base de données MySQL?


Je peux exécuter cette requête pour obtenir la taille de toutes les tables d'une base de données MySQL:

show table status from myDatabaseName;

Je voudrais de l'aide pour comprendre les résultats. Je cherche des tables avec les plus grandes tailles.

Quelle colonne devrais-je regarder?


631
2018-03-08 15:30


origine


Réponses:


Vous pouvez utiliser cette requête pour afficher la taille d'une table (même si vous devez d'abord remplacer les variables):

SELECT 
    table_name AS `Table`, 
    round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"
    AND table_name = "$TABLE_NAME";

ou cette requête pour lister la taille de chaque table dans chaque base de données, la plus grande en premier:

SELECT 
     table_schema as `Database`, 
     table_name AS `Table`, 
     round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
ORDER BY (data_length + index_length) DESC;

1446
2018-03-08 15:34



SELECT TABLE_NAME AS "Table Name", 
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30

Vous pouvez obtenir le nom du schéma depuis "information_schema"-> SCHEMATA table -> "SCHEMA_NAME"colonne


Additionnel Tu peux recevoir taille des bases de données mysql comme suit.

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; 

Résultat

DB Name              |      DB Size in MB

mydatabase_wrdp             39.1
information_schema          0.0

Vous pouvez obtenir des détails supplémentaires ici.


73
2017-09-15 17:41



SELECT 
    table_name AS "Table",  
    round(((data_length + index_length) / 1024 / 1024), 2) as size   
FROM information_schema.TABLES  
WHERE table_schema = "YOUR_DATABASE_NAME"  
ORDER BY size DESC; 

Cela trie les tailles (taille DB en Mo).


26
2018-01-18 15:09



Si vous souhaitez qu'une requête utilise la base de données actuellement sélectionnée. il suffit de copier coller cette requête. (Aucune modification requise)

SELECT table_name ,
  round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;

15
2018-02-16 00:56



Il existe un moyen facile d'obtenir de nombreuses informations en utilisant Workbench:

  • Cliquez avec le bouton droit sur le nom du schéma et cliquez sur "Inspecteur de schéma".

  • Dans la fenêtre résultante, vous avez un certain nombre d'onglets. Le premier onglet "Info" montre une estimation approximative de la taille de la base de données en Mo.

  • Le deuxième onglet, "Tables", affiche la longueur des données et d'autres détails pour chaque table.


10
2018-02-27 15:29



Si vous utilisez phpmyadmin alors allez simplement à la structure de la table

par exemple.

Space usage
Data    1.5 MiB
Index   0   B
Total   1.5 Mi

6
2018-03-21 14:05



Essayez la commande shell suivante (remplacez DB_NAME avec le nom de votre base de données):

mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head

Pour la solution Drupal / drush, consultez l'exemple de script suivant qui affichera les plus grandes tables utilisées:

#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20

6
2018-05-08 11:27



Supposons que le nom de votre base de données est "news_alert". Ensuite, cette requête affichera la taille de toutes les tables de la base de données.

Taille de toutes les tables:

SELECT
  TABLE_NAME AS `Table`,
  ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
  TABLE_SCHEMA = "news_alert"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Sortie:

    +---------+-----------+
    | Table   | Size (MB) |
    +---------+-----------+
    | news    |      0.08 |
    | keyword |      0.02 |
    +---------+-----------+
    2 rows in set (0.00 sec)

Pour un tableau spécifique:

SELECT
  TABLE_NAME AS `Table`,
  ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
    TABLE_SCHEMA = "news_alert"
  AND
    TABLE_NAME = "news"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Sortie:

+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news  |      0.08 |
+-------+-----------+
1 row in set (0.00 sec)

6
2017-09-10 17:54



Heres une autre façon de travailler à partir de l'aide de la ligne de commande bash.

for i in mysql -NB -e 'show databases'; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done


4
2017-11-10 11:06



Adapté de la réponse de ChapMic à la suite de mon besoin particulier.

Ne spécifiez que le nom de votre base de données, puis trier toutes les tables dans l'ordre décroissant - de LARGEST à SMALLEST table dans la base de données sélectionnée. Ne nécessite qu'une seule variable à remplacer = votre nom de base de données.

SELECT 
table_name AS `Table`, 
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES 
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;

3
2018-03-31 23:16



Si tu as ssh accès, vous pouvez essayer simplement du -hc /var/lib/mysql (ou différent datadir, comme défini dans votre my.cnf) ainsi que.


1
2017-07-17 15:54