Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Größe einer Datenbank    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
     Größe einer Datenbank Zitat | Bearbeiten

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 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
<?php
//Datenbank-Verbindung per mysqli_connect(); 
$mysqli = new mysqli("localhost""user""password""database");

function 
database_size($dbname)
   {
   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_assoc())
      {      
      
$size += $_rec['Index_length'] + $_rec['Data_length'] + $size_struct;        
      }

   return 
$size;
   }

echo 
database_size("datenbank_name")." Byte";
?>
Die Rückgabe ist in Byte.


Möchte man nur die Größe von einzelnen Tabellen wissen, dann kann man dies so Lösen:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
<?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;
         }
      }

   return 
$size;
   }

$table = array();
$table[] = "tabelle1";
$table[] = "tabelle2";
$table[] = "tabelle3";
echo 
table_size("datenbank_name",$table)." Byte";
?>
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.



www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich





Post wurde schon 2x editiert, das letzte mal am 18.10.2018 um 15:52 von Andavos
26.11.2005, 20:13 Profil | PM | E-Mail  
fireman
Mitglied
Guter User


Dabei seit: 23.06.2005
Herkunft: Nürnberg
Posts: 400
      Zitat | Bearbeiten

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?

die fehlermeldung seht ihr hier: http://www.syfire-solutions.de/helferlein/dbsize.php


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!

04.12.2005, 19:43 Profil | PM | E-Mail  
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
      Zitat | Bearbeiten

Hallo,
Zitat:
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?




www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



04.12.2005, 20:48 Profil | PM | E-Mail  
fireman
Mitglied
Guter User


Dabei seit: 23.06.2005
Herkunft: Nürnberg
Posts: 400
      Zitat | Bearbeiten

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!

04.12.2005, 20:50 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Muss es bei der einzell Tabellenabfrage nicht heisen?


 PHP 
1:
$abfrage = "SHOW TABLE STATUS FROM `$dbname` LIKE '$table'";



21.01.2009, 14:30  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

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.


22.01.2009, 07:53 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Größe einer Datenbank   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz