Dieser Script gibt den Speicherbedarf von einer Datenbank aus.
Manchmal ist es intressant, wieviel Festplattenspeicher die Datenbank (oder einzelne Tabellen) verbraucht.
Allerdings kann man hierbei nur den Speicherbedarf für die Einträge exakt ermitteln, den Speicherbedarf für die Struktur der Tabelle muss man schätzen.
Mit diesem Script ermittelt man die Größe der gesamten Datenbank, allerdings ohne Speicherplatz für Struktur:
<?php
//Datenbank-Verbindung per mysql_connect();
$mysqli = new mysqli("localhost", "user", "password", "database");
function table_size($dbname,$table)
{
global $mysqli;
$size = 0;
$size_struct = 0; //Durschnittliche Größe der Struktur einer Tabelle
$abfrage = "SHOW TABLE STATUS FROM `$dbname`;";
$ergebnis = $mysqli->query($abfrage);
while($_rec = $ergebnis->fetch_array())
{
if(!is_array($table) OR in_array($_rec['Name'], $table))
{
$size += $_rec['Index_length'] + $_rec['Data_length'] + $size_struct;
}
}
Auch hier ist die Rückgabe wieder in Byte, was man aber am besten noch in KB oder MB umrechnen sollte.
Diese beiden Funktionen geben nur den Speicherbedarf für den Inhalt zurück. Den Speicherbedarf für die Struktur müsste man schätzen.
Bei normalen Tabellen liegt er bei durchschnittlich 9000 Byte, also setzt man $size_struct einfach auf 9000.
ich wollte das jetzt mal ausprobieren doch bei mir klappt das nicht ganz...
ich hab die 2. zeile gelöscht und in zeile 7 statt $dbname meinen datenbank namen stehen...
was habe ich falsch gemacht?
Wenn du im Leben etwas erreichen willst,
wenn du gewinnen willst, dann höre auf dein Herz
und wenn dein Herz einmal nicht antwortet,
dann schließe deine Augen und denke an deine Eltern,
so wirst du keine Angst mehr haben und alle Hindernisse überwinden,
dann kannst du alles erreichen, einfach alles!
Warning: mysql_query(): Access denied for user: 'wwwrun@localhost' (Using password: NO) in /home/htdocs/web126/html/helferlein/dbsize.php on line 7
Du hast entweder keine Rechte für die Datenbank, oder du hast keine Rechte den Befehl 'SHOW STATUS' auszuführen.
Das kann z.B. dadurch kommen, dass du dich nicht (richtig) per mysql_connect(); verbunden hast, oder du eine falschen Datenbanknamen angegeben hast.
Evt. wurde auch der Befehl deaktiviert, was aber eher Unwahrscheinlich ist, denn sobald man Berichtigungen für die Datenbank+Tabelle hat, funktioniert der Befehl.
Was du machen kannst:
1. SHOW TABLE STATUS FROM `[NAME_DER_DATENBANK]`;
per phpMyAdmin ausführen, dann sollte eine große Tabelle erscheinen.
Bitte achte darauf, dass der NAME_DER_DATENBANK richtig ist.
2. mysql_query($abfrage) or print(mysql_error());
3. Was passiert, wenn die Abfrage _nicht_ in einer Funktion, sondern direkt im Code steht?
ach ich muss erst zur datenbank connecten? oh man bin ich blöd!! warte ich probier es mal aus^^
Wenn du im Leben etwas erreichen willst,
wenn du gewinnen willst, dann höre auf dein Herz
und wenn dein Herz einmal nicht antwortet,
dann schließe deine Augen und denke an deine Eltern,
so wirst du keine Angst mehr haben und alle Hindernisse überwinden,
dann kannst du alles erreichen, einfach alles!
Wenn wäre es table_name LIKE '', was aber relativ an geschwindigkeit kosten kann bei großen datenbanken und eine gesammt abfrage einfacher und schneller ist.