Ich verwende derzeit information_schema.TABLES, um die Gesamtspeicherplatznutzung zu berechnen, die nach dem Datenbanknamen gruppiert ist, aber es läuft furchtbar langsam. Auf Servern mit Hunderten von Datenbanken kann die Berechnung einige Minuten dauern.
Was ist die schnellste Methode zur Berechnung des Speicherplatzbedarfs nach Datenbank? Soll ich mir nur das Dateisystem ansehen? Gibt es eine Methode, um information_schema zu beschleunigen?
Wenn Sie MyISAM verwenden, ist es am einfachsten, sich das Dateisystem anzusehen und es zu verwenden du -sh /var/lib/mysql/database.
Wenn Sie InnoDB mit der Einstellung innodb_file_per_table verwenden, können Sie mit eine ungefähre Antwort erhalten du -sh. Dies ist ein ungefährer Wert, da noch einige Daten in der Datei ibdata1 gespeichert sind, sodass Sie ein wenig zurückhaltend sind. Diese Technik funktioniert auch mit gemischten MyISAM / InnoDB ( innodb_file_per_table) - Datenbanken.
Wenn Sie InnoDB ohne verwenden innodb_file_per_table set, müssen Sie sich INFORMATION_SCHEMA ansehen.
In jedem der oben genannten Fälle können Sie die folgende Abfrage ausführen, um die gesuchten Informationen abzurufen.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Wenn Sie eine sehr große Anzahl von Tabellen haben, kann dies langsam sein, wie Sie bereits festgestellt haben.
Ich habe an einer anderen Stelle festgestellt, dass Option 3 die VARCHAR-Größen nicht berücksichtigt.
Joe
3
Mit diesem Befehl können Sie Informationen in GB abrufen:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
ODER um freien / wiedergewinnbaren Speicherplatz einzuschließen, verwenden Sie:
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
Damit ich sehe, wo der Speicherplatz belegt ist (unabhängig davon, ob er sich in einer MySQL-Tabelle befindet oder nicht), verwende ich meinen vertrauenswürdigen "du" -Befehl. Hier ist ein Beispiel dafür, wie ich herausfinde, woher der gesamte Raum aufgebraucht wird.
Sie können sehen, dass der Großteil des Speicherplatzes von diesem Ordner verwendet wird. / mysql
Dieser Ordner enthält Datentabellen. Um zu sehen, welche Tabellen den gesamten Platz beanspruchen, können Sie mit der Option "human" oder "-h" wie folgt vorgehen. Ich mag es, die Speicherverwaltung auf diese Weise durchzuführen, weil Sie sich manchmal nicht einmal bei mysql anmelden können, weil Sie das Passwort oder den Benutzer nicht kennen.
Ich würde nach der Größe der Datei in Ihrem Wörterbuch suchen. Es ist sofort und genau.
Warnung : Je nach Speicher-Engine werden Indizes in der Hauptdatei oder in einer anderen Datei gespeichert. Vergessen Sie nicht, sie bei Bedarf zusammenzufassen.
Mit diesem Befehl können Sie Informationen in GB abrufen:
Die Antwort von Aaron Brown wurde angepasst , um die Größe in GB anzugeben. Siehe Aaron Brown Antwort für weitere Details.
ODER um freien / wiedergewinnbaren Speicherplatz einzuschließen, verwenden Sie:
Speicherplatz kann mit dem Befehl OPTIMIZE TABLE für InnoDB- , MyISAM- und ARCHIVE-Tabellen freigegeben werden.
Siehe auch Wie bekomme ich die wahre Größe einer MySQL-Datenbank? für mehr Details.
quelle
Um Informationen über den Namen der Tabelle und die Anzahl der Datensätze zu erhalten, kann die folgende Abfrage verwendet werden:
Um Informationen über Datenbanken auf den Servern mit ihrer jeweiligen Größe zu erhalten, kann die folgende Abfrage verwendet werden:
quelle
Damit ich sehe, wo der Speicherplatz belegt ist (unabhängig davon, ob er sich in einer MySQL-Tabelle befindet oder nicht), verwende ich meinen vertrauenswürdigen "du" -Befehl. Hier ist ein Beispiel dafür, wie ich herausfinde, woher der gesamte Raum aufgebraucht wird.
Sie können sehen, dass der Großteil des Speicherplatzes von diesem Ordner verwendet wird. / mysql
Dieser Ordner enthält Datentabellen. Um zu sehen, welche Tabellen den gesamten Platz beanspruchen, können Sie mit der Option "human" oder "-h" wie folgt vorgehen. Ich mag es, die Speicherverwaltung auf diese Weise durchzuführen, weil Sie sich manchmal nicht einmal bei mysql anmelden können, weil Sie das Passwort oder den Benutzer nicht kennen.
Sie können sehen, dass der gesamte Speicherplatz von einigen Tabellen mit vielen GiGs an Daten belegt wird. Hoffe das hilft.
quelle
Ich würde nach der Größe der Datei in Ihrem Wörterbuch suchen. Es ist sofort und genau.
Warnung : Je nach Speicher-Engine werden Indizes in der Hauptdatei oder in einer anderen Datei gespeichert. Vergessen Sie nicht, sie bei Bedarf zusammenzufassen.
quelle
Ich weiß, dass dies alt ist, aber vielleicht findet jemand dies relevant.
In MySQL verwende ich:
Da meine DB InnoDB ist, ist dies nur eine Schätzung.
Ich vergleiche diese Ausgabe mit:
Hoffe das hilft dir
quelle
Am besten (nachher
apt-get install ncdu
):um die gesamte Größe der MySQL-Datenbanken in Ihrem VPS zu erhalten.
quelle