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?
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;
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.
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).
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;
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.
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)
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
Wenn Sie phpmyadmin verwenden, gehen Sie einfach zur Tabellenstruktur
z.B.
Space usage
Data 1.5 MiB
Index 0 B
Total 1.5 Mi
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>
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;
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".
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
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.
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"
)
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;
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