Gibt es eine schnelle Möglichkeit, um festzustellen, wie viel Speicherplatz eine bestimmte MySQL-Tabelle belegt? Die Tabelle kann MyISAM oder Innodb sein.
Gibt es eine schnelle Möglichkeit, um festzustellen, wie viel Speicherplatz eine bestimmte MySQL-Tabelle belegt? Die Tabelle kann MyISAM oder Innodb sein.
Antworten:
Für einen Tisch mydb.mytable
Führen Sie für Folgendes aus für:
SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
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 !!!
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 mydb
mit Namen und Größe zu erhalten, sortiert nach Größe.
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/
Unter Linux mit standardmäßig installiertem MySQL:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
basierend auf dem MySQL-Datenbankstandort von NIXCRAFT
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!
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.
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
phpMyAdmin
in 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';
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