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.

Dan
quelle
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 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

Versuche es !!!

RolandoMySQLDBA
quelle
6
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
Márton Tamás
Weiß jemand, wie man dasselbe in MSSQL macht?
Ivan Yurchenko
@ RolandoMySQLDBA, könnten Sie bitte auf diesem stackoverflow.com/questions/47976837/…
davidb
15

Schnelles bisschen SQL, um die 20 größten Tabellen in MB zu erhalten.

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

Hoffe das ist nützlich für jemanden!

Ben
quelle
2

Unter Linux mit standardmäßig installiertem MySQL:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

basierend auf dem MySQL-Datenbankstandort von NIXCRAFT

Geekymartian
quelle
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 GROUP BY table_schema;

Hat mir sehr gut gefallen!

Arthur Felipe
quelle
0

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.

Luke Chadwick
quelle
Dies funktioniert nur für MyISAM-Datenbanken. Das OP bat um eine Lösung, die auch mit InnoDB funktioniert.
Bgs
0

Entnommen aus Wie überprüfe ich, wie viel Speicherplatz meine Datenbank belegt?

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';
Rahul
quelle
Dies setzt voraus, dass phpMyAdmin installiert ist
thebigjc
-1

Ich würde einfach das Tool ' mysqldiskusage ' wie folgt verwenden

$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB
Natouriano
quelle
Das OP fragte nach Speicherplatz für eine bestimmte MySQL-Tabelle, nicht für die gesamte Datenbank
machineaddict