Wie erhalte ich die wahre Größe der MySQL-Datenbank?

144

Ich möchte wissen, wie viel Speicherplatz meine MySQL-Datenbank verwendet, um einen Webhost auszuwählen. Ich habe den Befehl gefunden. SHOW TABLE STATUS LIKE 'table_name'Wenn ich die Abfrage durchführe, erhalte ich ungefähr Folgendes:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • Zahlen sind gerundet.

Habe ich also 362000 oder 400 * 362000 = 144800000 Datenbytes für diese Tabelle? Und was bedeutet Indexlänge? Vielen Dank !

Marvin
quelle
Sie haben 362000 + 66560. Data_Length + Index Length
Mandza
Mögliches Duplikat von Wie erhalte ich die Größe der MySQL-Datenbank?
Mohammad
Diese Seite gibt Ihnen genaue Antwort rathishkumar.in/2017/12/…
Rathish

Antworten:

281

Von S. Prakash, gefunden im MySQL-Forum :

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; 

Oder zum einfacheren Einfügen in eine einzelne Zeile:

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
quelle
7
Was bedeutet der freie Speicherplatz in MB? Ich habe 100 GB frei, aber es meldet weniger als 1 GB frei.
Barth
1
@Barth bedeutet laut Dokumentation "freier Speicherplatz in Bytes für InnoDB-Tabellen". Leider gibt es keine Erklärung, was das bedeutet: - \
ckujau
13
Freier Speicherplatz in Bytes bedeutet genau das - es bedeutet, dass Speicherplatz zurückgefordert werden kann, wenn Sie die Tabelle OPTIMIEREN oder die Tabelle von Grund auf neu erstellen. Wenn Datenbanken Informationen auf Datenträgern speichern, ordnen sie diese in Blöcken zu. Durch das Löschen eines Datensatzes wird häufig ein Block zwischen verwendeten Blöcken freigegeben, und es ist sehr teuer, alle anderen Blöcke zu verschieben, um diesen Speicherplatz zu nutzen, sodass er als "frei" markiert ist. Der Speicherplatz kann später vom Datenbankmodul selbst verwendet oder mithilfe von OPTIMIZE TABLE foo(MyISAM) zurückgefordert oder für InnoDB-Tabellen neu erstellt und analysiert werden.
Razzed
92

Sie können die Größe Ihrer MySQL-Datenbank ermitteln, indem Sie den folgenden Befehl im MySQL-Client ausführen

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
quelle
30

Wenn Sie phpMyAdmin verwenden, kann es Ihnen diese Informationen mitteilen.

Gehen Sie einfach zu "Datenbanken" (Menü oben) und klicken Sie auf "Statistiken aktivieren".

Sie werden so etwas sehen:

phpMyAdmin Screenshot

Dies wird wahrscheinlich mit zunehmender Größe an Genauigkeit verlieren, sollte jedoch für Ihre Zwecke genau genug sein.

Radu Murzea
quelle
Ich benutze derzeit 000webhost. Es hat phpMyAdmin, aber ich konnte kein Kontrollkästchen "Statistiken aktivieren" finden. Gibt es (vielleicht) eine Abfrage dafür?
Marvin
1
@marvin Nun, es ist möglich, dass auf dem Webhost eine ältere Version von phpMyAdmin installiert ist. Ich weiß nicht, in welcher Version diese Funktion eingeführt wurde.
Radu Murzea
Klicken Sie in Ihrer Seitenleiste oben auf das Home-Symbol, um zur Homepage zu gelangen. Klicken Sie dort im rechten Fenster auf "Datenbanken". Es wird eine einspaltige Tabelle mit Datenbanken
angezeigt. Darunter
8

Wenn Sie es in MB finden möchten, tun Sie dies

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
quelle
Das SQL-Snippet dieser Antwort scheint eine Kopie von stackoverflow.com/a/1733523/1200542
Ariel Allon am
3

Grundsätzlich gibt es zwei Möglichkeiten: DB abfragen (Datenlänge + Indexlänge) oder Dateigröße überprüfen. Die Indexlänge bezieht sich auf Daten, die in Indizes gespeichert sind.

Hier wird alles beschrieben:

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

MiGro
quelle
Nun, diese Seite ist die Quelle meiner Frage. Aber laut dieser Abfrage habe ich 0,5 MB, was mich ziemlich sicher macht. Ich hoffe es ist wahr :) Danke!
Marvin
0

Keine der Antworten enthält die Overhead-Größe und die Metadatengröße von Tabellen.

Hier ist eine genauere Schätzung des von einer Datenbank zugewiesenen "Speicherplatzes".

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
quelle
5
Könnten Sie näher darauf eingehen? Besonders deine Konstanten 300und 150?
Melebius
Könnten Sie bitte näher darauf eingehen?
Allan Andrade
0

SUM(Data_free) kann oder kann nicht gültig sein . Es kommt auf die Geschichte von an innodb_file_per_table. Weitere Diskussionen finden Sie hier .

Rick James
quelle
0

Wenn Sie MySql Workbench verwenden, können Sie ganz einfach alle Details zur Datenbankgröße, jeder Tabellengröße, Indexgröße usw. abrufen.

  1. Klicken Sie mit der rechten Maustaste auf Schema
  2. Wählen Sie die Option Schema Inspector

    Geben Sie hier die Bildbeschreibung ein

  3. Es werden alle Details der Schemagröße angezeigt

  4. Wählen Sie die Registerkarte Tabellen , um die Größe jeder Tabelle anzuzeigen.

    Geben Sie hier die Bildbeschreibung ein

  5. Die Tabellengröße ist in der Spalte Datenlänge angegeben

Viraj Dhamal
quelle
0

Wenn Sie die Größe aller MySQL-Datenbanken ermitteln möchten, geben Sie diesen Befehl ein. Die jeweiligen Größen werden in Megabyte angezeigt.

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

Wenn Sie über große Datenbanken verfügen, können Sie den folgenden Befehl verwenden, um das Ergebnis in Gigabyte anzuzeigen.

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

Wenn Sie beispielsweise nur die Größe einer bestimmten Datenbank anzeigen möchten YOUR_DATABASE_NAME, können Sie die folgende Abfrage verwenden.

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
quelle