Wie können Sie feststellen, wie viel Speicherplatz eine bestimmte MySQL-Tabelle belegt?
145
Gibt es eine schnelle Möglichkeit, um festzustellen, wie viel Speicherplatz eine bestimmte MySQL-Tabelle belegt? Die Tabelle kann MyISAM oder Innodb sein.
In PHPMyAdmin können Sie die Speicherplatznutzung anzeigen, indem Sie einfach auf die Tabelle klicken.
AR.
Die Antworten auf diese Frage haben mir geholfen, meine Lösung zu finden. Eine gründliche Suche nach einem Tool, das mir helfen könnte, ohne jedes Mal dieselbe Abfrage auszuführen, um die Daten abzurufen , veranlasste mich, MONyog , MySQL Enterprise Monitor und Percona Toolkit zu durchlaufen . Alle geben Details zu Festplatteninformationen an, haben sich aber schließlich für MONyog entschieden, um bessere Grafikdiagramme und eine einfache Benutzeroberfläche zu erhalten.
Mathew
Antworten:
285
Für einen Tisch mydb.mytableFühren Sie für Folgendes aus für:
BYTES
SELECT(data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb'and table_name='mytable';
KILOBYTES
SELECT(data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb'and table_name='mytable';
MEGABYTES
SELECT(data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb'and table_name='mytable';
GIGABYTES
SELECT(data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb'and table_name='mytable';
GENERISCH
Hier ist eine generische Abfrage, bei der die maximale Einheitenanzeige TB (TeraBytes) ist.
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;um eine Liste aller Tabellen mydbmit Namen und Größe zu erhalten, sortiert nach Größe.
kqw
1
Fügen Sie "DESC" an die ORDER BY-Klausel an, um Tabellen anzuzeigen, die zuerst mehr Speicherplatz belegen. ;)
mvsagar
Um genau zu sein, können Sie die Einheiten ki nennen bi bytes (KiB), me bi bytes (MiB) und gi bi bytes (GiB) wenn Sie binäre Präfixe verwenden (Multiplikation mit der Potenz 2). Oder Sie möchten möglicherweise Dezimalpräfixe verwenden (Multiplikation mit der Potenz 1000) und dann die Einheiten ki lo Bytes (KB), me ga Bytes (MB) und gi ga Bytes (GB) aufrufen . Weitere Informationen
Die Frage ist, wie der von einer bestimmten Tabelle belegte Platz gemessen werden kann .
Flimm
@ShariqueAbdullah Dies funktioniert, wenn Sie innodb_file_per_table verwenden, was nicht die Standardeinstellung ist, aber ich denke, es ist sehr häufig und / oder empfohlen (jemand kann mir leicht das Gegenteil beweisen, nur meinen Eindruck).
Seaux
@Seaux, mag sein, aber ich habe nicht festgestellt, dass es in empfohlenen Server-Setups verwendet wird, die ich durchlaufen habe. Sie haben vielleicht Recht, aber da dies nicht die Standardeinstellung ist, findet er sie möglicherweise nicht. Außerdem denke ich, dass innodb im Vergleich zu MyISAM ganz anders funktioniert. Selbst wenn Sie die Dateigröße haben, ist diese möglicherweise nicht so genau wie bei MyISAM. Aber Sie haben Recht, das kann eine Lösung sein. Ich persönlich bevorzuge die Verwendung von MySQL-Befehlen, um diese Informationen abzurufen, anstatt die Dateigröße zu messen.
Sharique Abdullah
2
Basierend auf der Antwort von RolandMySQLDBA denke ich, dass wir das Obige verwenden können, um die Größe jedes Schemas in einer Tabelle zu ermitteln:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUPBY table_schema;
Sie könnten sich vielleicht die Größe der Dateien ansehen ...
Jede Tabelle wird in mehreren separaten Dateien in einem Ordner gespeichert, der den Namen Ihrer Datenbank trägt. Diese Ordner werden im MySQL-Datenverzeichnis gespeichert.
Von dort aus können Sie ein 'du -sh. *' Ausführen, um die Größe der Tabelle auf der Festplatte zu ermitteln.
Sie können die Größe der MySQL-Tabelle überprüfen, indem Sie phpMyAdminin Ihrem Control Panel auf den Datenbanknamen im linken Frame klicken und die Größe der dortigen Tabellen im rechten Frame lesen.
Die folgende Abfrage hilft auch dabei, die gleichen Informationen zu erhalten bytes
select SUM(data_length)+ SUM(index_length)as total_size
from information_schema.tables
where table_schema ='db_name'and table_name='table_name';
Antworten:
Für einen Tisch
mydb.mytable
Führen Sie für Folgendes aus für:BYTES
KILOBYTES
MEGABYTES
GIGABYTES
GENERISCH
Hier ist eine generische Abfrage, bei der die maximale Einheitenanzeige TB (TeraBytes) ist.
Versuche es !!!
quelle
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;
um eine Liste aller Tabellenmydb
mit Namen und Größe zu erhalten, sortiert nach Größe.Schnelles bisschen SQL, um die 20 größten Tabellen in MB zu erhalten.
Hoffe das ist nützlich für jemanden!
quelle
Dies ist für InnoDB-Tabellen nicht korrekt. Die Größe auf der Festplatte ist tatsächlich größer als die per Abfrage gemeldete.
Weitere Informationen finden Sie unter diesem Link von Percona.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
quelle
Unter Linux mit standardmäßig installiertem MySQL:
basierend auf dem MySQL-Datenbankstandort von NIXCRAFT
quelle
Basierend auf der Antwort von RolandMySQLDBA denke ich, dass wir das Obige verwenden können, um die Größe jedes Schemas in einer Tabelle zu ermitteln:
Hat mir sehr gut gefallen!
quelle
Sie könnten sich vielleicht die Größe der Dateien ansehen ...
Jede Tabelle wird in mehreren separaten Dateien in einem Ordner gespeichert, der den Namen Ihrer Datenbank trägt. Diese Ordner werden im MySQL-Datenverzeichnis gespeichert.
Von dort aus können Sie ein 'du -sh. *' Ausführen, um die Größe der Tabelle auf der Festplatte zu ermitteln.
quelle
Entnommen aus Wie überprüfe ich, wie viel Speicherplatz meine Datenbank belegt?
Die folgende Abfrage hilft auch dabei, die gleichen Informationen zu erhalten
bytes
quelle
Ich würde einfach das Tool ' mysqldiskusage ' wie folgt verwenden
quelle