it-swarm.com.de

Wie kann ich die Größe der Tabellen einer MySQL-Datenbank ermitteln?

Ich kann diese Abfrage ausführen, um die Größe aller Tabellen in einer MySQL-Datenbank abzurufen:

show table status from myDatabaseName;

Ich hätte gerne Hilfe beim Verständnis der Ergebnisse. Ich suche Tische mit den größten Größen. 

Welche Kolumne soll ich mir anschauen?

701
JPashs

Sie können diese Abfrage verwenden, um die Größe einer Tabelle anzuzeigen (obwohl Sie zuerst die Variablen ersetzen müssen):

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";

oder diese Abfrage, um die Größe jeder Tabelle in jeder Datenbank aufzulisten, zuerst die größte:

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;
1598
ChapMic
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

Sie können den Schemanamen aus der Spalte "information_schema" -> SCHEMATA table -> "SCHEMA_NAME" erhalten


Additional Sie können size der MySQL-Datenbanken wie folgt erhalten.

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; 

Ergebnis

DB Name              |      DB Size in MB

mydatabase_wrdp             39.1
information_schema          0.0

Hier können Sie weitere Details erhalten.

80
Sumith Harshan
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; 

Dies sortiert die Größen (DB-Größe in MB).

30
Gank

Wenn Sie möchten, dass eine Abfrage die aktuell ausgewählte Datenbank verwendet. Kopieren Sie einfach diese Abfrage. (Keine Änderung erforderlich)

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;
20
zainengineer

Es gibt eine einfache Möglichkeit, viele Informationen über Workbench zu erhalten:

  • Klicken Sie mit der rechten Maustaste auf den Schemanamen und klicken Sie auf "Schema-Inspektor".

  • Im resultierenden Fenster haben Sie eine Reihe von Registerkarten. Die erste Registerkarte "Info" zeigt eine grobe Schätzung der Datenbankgröße in MB.

  • Die zweite Registerkarte "Tabellen" zeigt die Datenlänge und andere Details für jede Tabelle.

12
Guppy

Angenommen, Ihr Datenbankname lautet"news_alert".Diese Abfrage zeigt dann die Größe aller Tabellen in der Datenbank an.

Größe aller Tabellen:

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;

Ausgabe:

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

Für bestimmte Tabelle:

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;

Ausgabe:

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

Probieren Sie den folgenden Shell-Befehl aus (ersetzen Sie DB_NAME Durch Ihren Datenbanknamen):

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

Überprüfen Sie für Drupal/drush-Lösungen das folgende Beispielskript, in dem die größten verwendeten Tabellen angezeigt werden:

#!/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
7
kenorb

Wenn Sie phpmyadmin verwenden, gehen Sie einfach zur Tabellenstruktur

z.B.

Space usage
Data    1.5 MiB
Index   0   B
Total   1.5 Mi
6
Almis

Dies ist eine andere Möglichkeit, dies mithilfe der Bash-Befehlszeile zu ermitteln. 

for i in mysql -NB -e 'show databases'; echo $ i; mysql -e "SELECT-Tabellenname AS 'Tabellen', rund (((Datenlänge + Indexlänge)/1024/1024), 2) 'Größe in MB' FROM information_schema.TABLES WHERE Tabellenschema = \" $ i "ORDER BY (Datenlänge + index_length) DESC "; erledigt </ code>

5
user1380599

Angepasst von ChapMics Antwort auf meine besonderen Bedürfnisse.

Geben Sie nur Ihren Datenbanknamen an und sortieren Sie dann alle Tabellen in absteigender Reihenfolge - von der Tabelle LARGEST bis zur Tabelle SMALLEST in der ausgewählten Datenbank. Benötigt nur 1 Variable = Ihren Datenbanknamen.

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;
4
dev101

Eine andere Möglichkeit, die Anzahl der Zeilen und den von ihm belegten Platz und die Reihenfolge anzuzeigen. 

SELECT
     table_schema as `Database`,
     table_name AS `Table`,
     table_rows AS "Quant of Rows",
     round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;  

Die einzige Zeichenfolge, die Sie in dieser Abfrage einsetzen müssen, ist "yourDatabaseName".

2
Nav

Ich finde, die vorhandenen Antworten geben nicht wirklich die Größe der Tabellen auf der Festplatte an, was hilfreicher ist. Diese Abfrage liefert eine genauere Festplattenschätzung im Vergleich zur Tabellengröße basierend auf data_length & index. Ich musste dies für eine AWS RDS-Instanz verwenden, bei der Sie die Festplatte nicht physisch untersuchen und die Dateigröße nicht überprüfen können.

select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB 
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t 
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc
1
Ryum Aayur

Wenn Sie über ssh verfügen, können Sie einfach du -hc /var/lib/mysql (oder eine andere datadir, wie in Ihrem my.cnf festgelegt) ausprobieren.

1
exic

Berechnen Sie die Gesamtgröße der Datenbank am Ende:

(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"
)
UNION ALL
(SELECT 
  'TOTAL:',
  SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
  FROM information_schema.TABLES 
  WHERE table_schema = "$DB_NAME"
)
1
MINGSONG HU

dies sollte in mysql getestet werden, nicht in postgresql 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;

0
William
SELECT TABLE_NAME AS table_name, 
table_rows AS QuantofRows, 
ROUND((data_length + index_length) /1024, 2 ) AS total_size_kb 
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'db'
ORDER BY (data_length + index_length) DESC; 

alle oben genannten 2 werden auf MySQL getestet

0
William