Größe und weiter Infos einer Datenbank ermitteln?

danielmueller

Gesperrt
Ich würde gern wissen wie groß meine Datenbanken sind wie kann ich das mit einem php Skript realisieren? Desweiteren würde ich gerne eine Zeile integrieren wie man sie zb von Woltlab Borads kennt nämlich:
Diese Seite wurde in 0.302 Sekunden generiert, wobei 0.163 Sekunden auf 43 MySQL Abfragen entfallen.

Demo(ganz unten)
 
Für die Zeitmessung schauste Dir am Besten ma microtime(); an
und die Datenbankgröße kann z.B. phpMyAdmin sehr detailiert auslesen... könnteste ja mal reingucken

Gruss Danilo
 
Hallo!

@ u-Danilo:
Deine Antwort ist leider etwas dürftig ausgefallen!
Und, wenn ich das mal feststellen darf, ist das leider nicht das erste Mal! :rolleyes: :p
Ein kleines Beispiel hätte bestimmt nicht geschadet!

Also gibt es halt von mir ein kleines Beispiel (ich erkläre das Script sehr einfach - das mache ich aber nicht, weil ich denke, dass du keine Ahnung hast, sondern damit es auch jemand versteht, der nicht soviel Ahnung von PHP hat (also bitte nicht beschweren ;) )): :)

PHP:
<?php
        $st = explode(' ',microtime());
        $start = ((float)$start[0] + (float)$start[1]);

        // hier kommt dann der normale PHP-Code hinein

        et = explode(' ',microtime());
        $end = ((float)$et[0] + (float)$et[1]);

        $neededtime = $end - $start;

        echo "Diese Seite wurde in $neededtime Sekunden bearbeitet";
?>

Das Beispiel gibt die benötigte Zeit in Sekunden aus.

Mit

PHP:
        $st = explode(' ',microtime());
        $start = ((float)$start[0] + (float)$start[1]);

Wird die Startzeit ermittelt.
Dazu wird in dem Array $st die Zeit im Format des normalen Unix-Zeitstempels (der Unix Zeitstempel ist eine Zahl vom Typ Integer (Ganzzahl), indem die Sekunden, die seit dem 1.1.1970 vergangen sind wieder gegeben werden) und zusätzlich die Angabe der Mikrosekunden.

Diese Zeit wird mit der in PHP integrierten Funktion microtime() ermittelt.
Diese Funktion gibt einen String mit diesem Format zurück:

0.09381100 1080264666

Es werden 2 Werte, die mit einem Leerzeichen voneinander getrennt sind, ausgegeben.


Der erste Wert enthält die Aktuell vergangene Anzahl an Mikrosekunden der aktuellen Sekunde (es wird also nie ein Wert über 1 zurückgegeben - bitte korrigieren, falls ich mich irren sollte (hab's bis jetzt aber nicht erlebt)).


Der zweite Wert ist der bereits angesprochen Unix-Zeitstempel.
Nun muss, um mit den Werten rechnen zu können, diese Ausgabe umformuliert werden.
Dazu benutze ich die Funktion explode() .
Diese Funktion teilt eine Zeichenkette in einzelne Array-Elemente auf und das nach einem Zeichen, das man selbst festlegen kann. Dieses festgelegte Zeichen wird dann aber nicht mit ins Array übernommen.
In diesem Fall muss der String also beim Leerzeichen in ein Array umgewandelt werden.
Der Code dafür lautet:

PHP:
$st = explode(' ', microtime());
//Der erste Parameter enthält das Zeichen, das zum "zerstückeln" des Arrays benutzt werden soll.
//Der zweite Parameter enthält den String der in ein Array umgewandelt werden soll.

Dadurch erhält man ein Array mit folgender Struktur:

Array (0 => '0.09381100', 1 => '1080264666');

Das erste Element (0) enthält nun also die Mikrosekunden und das zweite Element (1) enthält den Unix-Zeitstempel.
Das Array hat den Namen $st zugewiesen bekommen.
Nun müssen noch die Mikrosekunden zu den Sekunden des Zeitstempels hinzuaddiert werden.
Dies geschieht in folgender Zeile:

PHP:
$start = ((float)$start[0] + (float)$start[1]);

Mit

PHP:
(float) $start[0];

werden die Werte des Arrays erstmal in ein berechenbares Format gebracht, da die Werte ja noch als String gespeichert sind.
Diesen Code könnte man auch weg lassen, da PHP Datentypen automatisch erkennt und z. B. bei Rechenoperationen automatisch umwandelt.
Um aber sicher zu stellen, dass der richtige Datentyp gewählt wird, schreibe ich das lieber dazu.
Nachdem nun die Werte des Arrays $st umgewandelt wurden, werden die einzelnen Werte addiert.
Dieser Schlusswert wird dann in der Variablen $start gespeichert und ist vom Typ float.

Auf diese Weise kann die aktuelle Zeit in Mikrosekunden ermittelt werden.
Wenn das nun vor einer gewissen Operation geschieht und anschließend auch nach dieser Operation, kann man durch das Subtrahieren dieser beiden Werte die Zeit ermitteln, die während der Operation vergangen ist.

Dieser Code wird einmal zur Startzeit (je nachdem, wann die Messung beginnen soll) und zur Zeit der Beendigung der Messung durchgeführt.
Durch dieses Verfahren kann entweder die Ausführdauer eines Scripts, oder alle andere(n) Operation(en) berechnet werden.
Also lässt sich so natürlich auch die Dauer einer MySQL-Query berechnen.

Ein Beispiel dafür:

PHP:
<?php
        $st = explode(' ',microtime());
        $start = ((float)$start[0] + (float)$start[1]);

        $Query = mysql_query("SELECT spalte FROM tabelle WHERE spalte='wert'", $mysql_link);

        et = explode(' ',microtime());
        $end = ((float)$et[0] + (float)$et[1]);

        $neededtime = $end - $start;

        echo "Die Query dauerte $neededtime Sekunden";
?>

Wenn du nun auch die Dauer eines Script berechnen willst, einfach die ersten beiden Zeilen

PHP:
        $st = explode(' ',microtime());
        $start = ((float)$start[0] + (float)$start[1]);

an den Anfang des Scripts setzten und dann noch die Berechnung der Schlusszeit

PHP:
        et = explode(' ',microtime());
        $end = ((float)$et[0] + (float)$et[1]);
        $neededtime = $end - $start;

an das Ende des Scripts setzten.
Nun kannst du mit $neededtime die Ausführdauer des Scripts anzeigen lassen.


Um die "Größe" einer Datenbank zu ermitteln, gibt es verschiedene Möglichkeiten, je nachdem, was du von der Datenbank/Tabelle erfahren möchtest.
Deshalb die Frage:
Was genau verstehst du unter "Größe"?
Die Anzahl der Zeilen zum Beispiel können mit folgender MySQL-Query ermittelt werden:

PHP:
$result = mysql_query('SELECT COUNT(spalte) FROM tabelle');
$count = mysql_result($result,0);
echo $count;
 
Zuletzt bearbeitet von einem Moderator:
Zurück