IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: Größe einer MySQL Datenbank ermitteln



PHP: Größe einer MySQL Datenbank ermitteln

In den Statistiken der Websites finden sich immer mehr Details. Besonders interessant ist dabei die Größe der Datenbank. Doch wie kommt man an diese Information? Sie wird nicht auf dem Silbertablett präsentiert und es gibt auch keine in PHP integrierte Funktion, die sie einfach ausgibt. In diesem Artikel werden Sie lernen, wie man ohne viel Aufwand an sie rankommt.


Autor: ()
Datum: 01-11-2004, 12:57:05
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 13283x
Rating: 9 (2x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Anfangs müssen wir natürlich eine Verbindung zur MySQL-Datenbank herstellen und den Namen der Datenbank festlegen.

<?php

$host
= "localhost";
$user = "Hans";
$pass = "root";
$name = "gaestebuch";

$server_id = mysql_connect($host, $user, $pass);

?>


So weit so gut. Der nächste Teil erfordert einige genauere MySQL-Kenntnisse. Wenn man nämlich den Befehl "SHOW TABLE STATUS FROM dbname" von MySQL ausführen lässt (per Konsole oder Programmen wie etwa MySQL-Front) bekommt man eine tabellarische Auswertung. Folgende Informationen werden für jede einzelne Tabelle der Datenbank ausgegeben:
  • Name
  • Type
  • Row_format
  • Rows
  • Avg_row_length
  • Data_length
  • Max_data_length
  • Index_length
  • Data_free
  • Auto_increment
  • Create_time
  • Update_time
  • Check_time
  • Create_options
  • Comment
Wie man sieht brauchen wir für die Größe jeder Tabelle nur 2 Informationen aus dem Query - nämlich "Data_length" und "Index_length". Wie Sie jetzt vermutlich schon ahnen, kann man die Anfrage "SHOW TABLE STATUS FROM dbname" auch einfach von PHP mittels "mysql_query()" ausführen lassen. Dann müssen wir nur noch das Resultat per "mysql_fetch_array" weiterverarbeiten. Dazu der Source-Code:

<?php

function db_size($name) {

// Anfrage definieren
$sql = "SHOW TABLE STATUS FROM " . $name;

// Anfragen und bei Misserfolg abbrechen
if($query = @mysql_query($sql)) {

// Ergebnis per mysql_fetch_array holen
while($result = @mysql_fetch_array($query)) {

// Ergebnis in ein Array einlesen
$tabledata[] = $result;

}

// Variabel initialisieren und Größe auf 0 setzen
$db_size = 0;

// Solange die Größe auffüllen, bis alle Tabellen durch sind
for($i=0; $i<count($tabledata); $i++) {

$db_size += $tabledata[$i]["Data_length"] + $tabledata[$i]["Index_length"];

}

return
$db_size;

}
else {

return
"MySQL Query fehlgeschlagen!";

}

}

?>


Kommentar: Das @ vor einem Funktionsaufruf bewirkt, dass keine Fehlermeldungen zurückgegeben werden.

Zum Abschluss noch eine kleine Funktion, die man immer und überall gebrauchen kann. Der Rückgabe-Wert der "db_size()" Funktion ist die Größe der Datenbank in Byte. Unpraktisch wir es hier bei einer Größe von mehreren Megabyte. Deshalb noch die Funktion "format_size()":

<?php

function format_size($size) {

if(
$size >= 1073741824) { return round(($size / 1073741824), 2) . "GB"; }
elseif(
$size >= 1048576) { return round(($size / 1048576), 2) . "MB"; }
elseif(
$size >= 1024) { return round(($size / 1024), 2) . " KB"; }
else { return
$size . " Byte"; }

}

?>



Senior Member
Beitrag vom:
04-11-2004, 19:54:10

Ne, hätt ich echt dabei schreiben müssen... Naja, jetzt ist es ja geklärt.
Ich empfele dir aber, wenn du dich mit PHP etwas intensiver beschäftigen willst, den Artikel "OOP in PHP" zu lesen.

-> http://www.it-academy.cc/content/article_browse.php?ID=1353

-----------------------------------------------------


no_comment
Professonial
Beitrag vom:
03-11-2004, 18:03:15

yup, das wars, noobs wie ich brauchen halt jeden Befehl im Script ;) thx

-----------------------------------------------------
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel -- http://pc-intern.com http://straightvisions.com



Senior Member
Beitrag vom:
03-11-2004, 15:12:16

Hmm... Hab es nochmal direkt nach einem Neustart ausprobiert ohne mysql_select_db() und es hat funktioniert. Der Quelltext stimmt auch - hab ihn 1 zu 1 kopiert und getestet. Auch verschiedene Datenbanken hab ich benutzt ohne diese zu selecten.

Vielleicht liegt es aber auch daran, dass es Funktionen sind. Um die Größe auf dem Bildschirm angezeigt zu bekommen muss man "echo format_size(db_size($name));" schreiben.

-----------------------------------------------------



Senior Member
Beitrag vom:
03-11-2004, 15:05:43

Kann sein... Ich hatte die Funktion zuerst drin stehen, hab mir aber dann gedacht, dass ich sie doch nicht brauchen werde, weil es bei mir auch immer ohne geklappt hat.
Klingt allerdings logisch - mein Fehler.

-----------------------------------------------------


dreamer
Expert
Beitrag vom:
03-11-2004, 12:55:14

Ich glaube da fehlt die Funktion mysql_select_db() .

-----------------------------------------------------


no_comment
Professonial
Beitrag vom:
02-11-2004, 08:08:01

Bei mir wird nur eine leere Seite zurückgegeben. Habe deinen Coide 1 zu 1 übernommen und lediglich die MySQL-Zugangsdaten geändert.

-----------------------------------------------------
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel -- http://pc-intern.com http://straightvisions.com


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0