MySQL Datenbankgröße ermitteln

Wie man in SQL/MySQL die Größe der Gesamten Datenbank und die Größe einzelner Tabellen ermitteln kann.



MySQL Datenbankgröße ermitteln
Möchten Sie auch die Größe einer Datenbank ermitteln, werden Sie merken, dass es in MySQL keine vordefinierte Methode dafür gibt. Aber es ist dennoch nicht schwer die Größe einzelner Tabellen und die Größe der gesamten Datenbank herauszufinden.


Vorgehensweise
Um die Größe einer einzelnen Datenbanktabelle zu erhalten, muss lediglich die Größe jeder einzelnen Zeile in der Tabelle ermittelt - und aufaddiert werden. Hat man die Größe einer einzelnen Datenbanktabelle erst mal, so ist es kein großes Problem mehr die Größe der gesamten Datenbank zu bestimmen, denn hierzu müssen lediglich die Ergebnisse alle Tabelle aufaddieren werden!


SHOW TABLE STATUS
Bei unserem Vorhaben benötigen wird den Befehl >>SHOW TABLE STATUS<<. Dieser Befehl liefert uns nämlich ein Array, in welchem unter anderem die Einträge >>Data_length<<, >>Index_length<< und >>Name<< enthalten sind.

Data_length : Liefert die Länge der ausgelesenen Zeile
Index_length: Liefert die Länge der Index-Datei
Name : Liefert den Namen der aktuellen Datenbanktabelle (wird für die Berechnung selber nicht benötigt)

Nun muss nur anhand der Indexlänge >>Index_length<< jeder Datensatz durchlaufen - und die Datenlängen >>Data_length<< aufaddiert werden.

Möchte man die Länge einer einzelnen Tabelle ermitteln, so muss hinter >>SHOW TABLE STATUS<< noch mit >>WHERE Name='Tabellenname'<< der Name der Tabelle mitgeliefert werden. Möchte man die gesamte Datenbanklänge erhalten, so lässt man die WHERE-Klausel einfach weg und erhält alle Tabellen mit allen Zeilen die es in der angegebenen Datenbank gibt.


Quelltext in PHP

/**
 * @desc Ermittelt die Gesamtgroesse der angegebenen Datenbanktabelle
 * @param string $tableName (optional) : Länge der angegebenen 
 *    Tabelle ermitteln. Wenn $tableName nicht angegeben ist, 
 *    wird die Länge der Gesamten Datenbank ermittelt
 * @return integer
 */
function getTableLength ( $tableName = '' )
{	
  // Größe einer bestimmten Tabelle ermitteln (optional)
  if( $tableName != "" )
    $tableName =  " WHERE Name='".$tableName."'";
 
 
  // Anfragen starten
  if( $query = @mysql_query("SHOW TABLE STATUS $tableName") )
  {
    $curSize = 0; // Aktuelle aufaddierte Größe jeder Zeile
 
    // Ergebnis per mysql_fetch_array holen
    while( $result = @mysql_fetch_array($query) )
    {
      // echo $result["Name"]."<br />"; // Ausgabe des Tabellennamens
      $curSize += $result["Data_length"] + $result["Index_length"];
    }
 
 
    return $curSize / 1000; // Ausgabe in Kbyte
  }
 
 
  return -1; // Größenberechnung konnte nicht durchgeführt werden
} 
 
Weitere Informationen über SHOW TABLE STATUS