1163 Stimmen

Wie bekomme ich die Größen der Tabellen einer MySQL-Datenbank?

Ich kann diese Abfrage ausführen, um die Größen aller Tabellen in einer MySQL-Datenbank zu erhalten:

show table status from myDatabaseName;

Ich hätte gerne etwas Hilfe beim Verständnis der Ergebnisse. Ich suche nach Tabellen mit den größten Größen.

Auf welche Spalte sollte ich achten?

10 Stimmen

Was meinen Sie mit Größe? Anzahl der Zeilen? Bytes auf der Festplatte verwendet?

0 Stimmen

@Mark Ich möchte die Größe auf der Festplatte. Ist das die richtige Methode? # du -sh /mnt/mysql_data/openx/f_scraper_banner_details.MYI 79G /mnt/mysql_data/openx/f_scraper_banner_details.MYI

3 Stimmen

Verwandt, falls es von Interesse ist, habe ich einen Alle Tabellen beschreiben in dieser Antwort geschrieben.

2395voto

ChapMic Punkte 26444

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 `Tabelle`, 
    round(((data_length + index_length) / 1024 / 1024), 2) `Größe 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 zu listen, zuerst die größte:

SELECT 
     table_schema as `Datenbank`, 
     table_name AS `Tabelle`, 
     round(((data_length + index_length) / 1024 / 1024), 2) `Größe in MB` 
FROM information_schema.TABLES 
ORDER BY (data_length + index_length) DESC;

5 Stimmen

Vielen Dank, es funktioniert einwandfrei, obwohl ich mir nicht sicher bin, ob es Blobs berücksichtigt.

7 Stimmen

Hinweis, Sie können auch "IN" verwenden, um mehrere Tabellen anzugeben, z. AND table_name IN ('table_1', 'table_2', 'table_3');

9 Stimmen

AFAICT, dies zählt nur die Längen der Felder mit festen Größen korrekt. Wie würden Sie VARCHAR und BLOB-Typen zählen?

135voto

Sumith Harshan Punkte 5998
SELECT TABLE_NAME AS "Tabellenname", 
table_rows AS "Anzahl der Zeilen", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Gesamtgröße Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'IHREN SCHEMA-NAMEN/DATENBANKNAMEN HIER'
LIMIT 0 , 30

Sie können den Schemanamen aus der "information_schema" -> SCHEMATA Tabelle -> "SCHEMA_NAME" Spalte erhalten


Zusätzlich Sie können die Größe der MySQL-Datenbanken wie folgt erhalten.

SELECT table_schema "DB Name", 
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Größe in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema
ORDER BY `DB Größe in MB` DESC;

Ergebnis

DB Name              |      DB Größe in MB

meinedatenbank_wrdp             39.1
information_schema          0.0

Sie können hier weitere Details erhalten.

0 Stimmen

Wie kann es sein, dass ich mit der obigen Abfrage Datenbankgrößen von 200 MB sehe, aber auf der Festplatte sind es wie 38 GB! Über 2300 mysql-bin.*-Dateien, jeweils ca. 15,6 MB...?!

0 Stimmen

@dokaspar die binlogs sind getrennt von den Datendateien. Du könntest viele Binlogs mit viel Aktivität, Einfügen/Löschen usw. anhäufen, während die Tabellen nicht viel Platz einnehmen. Überprüfe deine expire_log_days dev.mysql.com/doc/refman/8.0/en/… - du kannst Speicherplatz sparen, indem du weniger Binärprotokolle behältst.

63voto

Gank Punkte 5255
SELECT 
    table_name AS "Tabelle",  
    round(((data_length + index_length) / 1024 / 1024), 2) as größe   
FROM information_schema.TABLES  
WHERE table_schema = "DEIN_DATABASE_NAME"  
ORDER BY größe DESC; 

Dies sortiert die Größen (DB Größe in MB).

0 Stimmen

Das hat geholfen. So einfach wie es nur sein könnte. <3

47voto

zainengineer Punkte 11921

Wenn Sie möchten, dass eine Abfrage die aktuell ausgewählte Datenbank verwendet, kopieren Sie einfach diese Abfrage ohne Änderungen.

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;

6 Stimmen

Oder noch kürzer (ohne Unterabfrage): WÄHLE table_name, round(((data_length + index_length) / 1024 / 1024), 2) SIZE_MB AUS information_schema.TABLES WO table_schema=DATABASE() ORDER BY (data_length + index_length) ASC;

36voto

Nurul Akter Towhid Punkte 2678
  • Größe aller Tabellen:

    Angenommen, der Name Ihrer Datenbank oder TABLE_SCHEMA ist "news_alert". Dann zeigt diese Abfrage die Größe aller Tabellen in der Datenbank an.

    SELECT
      TABLE_NAME AS `Tabelle`,
      ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Größe (MB)`
    FROM
      information_schema.TABLES
    WHERE
      TABLE_SCHEMA = "news_alert"
    ORDER BY
      (DATA_LENGTH + INDEX_LENGTH)
    DESC;

    Ausgabe:

        +---------+-----------+
        | Tabelle  | Größe (MB) |
        +---------+-----------+
        | news    |      0.08 |
        | keyword |      0.02 |
        +---------+-----------+
        2 Zeilen in Set (0.00 Sek.)
  • Für die spezifische Tabelle:

    Angenommen, Ihr TABELLENNAME ist "news". Dann lautet die SQL-Abfrage-

    SELECT
      TABLE_NAME AS `Tabelle`,
      ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Größe (MB)`
    FROM
      information_schema.TABLES
    WHERE
        TABLE_SCHEMA = "news_alert"
      AND
        TABLE_NAME = "news"
    ORDER BY
      (DATA_LENGTH + INDEX_LENGTH)
    DESC;

    Ausgabe:

    +-------+-----------+
    | Tabelle | Größe (MB) |
    +-------+-----------+
    | news  |      0.08 |
    +-------+-----------+
    1 Zeile in Set (0.00 Sek.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X