Déterminer la taille d'un base de données mysql et le nombre d'enregistrements

Soyez le premier à donner votre avis sur cette source.

Snippet vu 30 003 fois - Téléchargée 35 fois

Contenu du snippet

Pour déterminer la taille d'une base de données MYSQL et le nombre d'enregistrements. on fait appel à la requête suivante :

"SHOW TABLE STATUS", qui affiche plusieurs informations concernant les tables. Et en parcourant le résultat de cette requête, on peut tirer la taille de la base en additionnant la tailles des tables et les index.

Ce code est utile pour suivre l'évolution de votre base de données en cas où vous avez une interface Admin dans votre site web et que vous ne voulez pas utiliser PHPMyAdmin pour voir tout ça ;)

NB : ce code est tiré de : http://www.webmasterworld.com/forum88/2069.htm

Source / Exemple :


<html>
<head>
<title>Taille Base de données MySQL</title>
</head>

<body>
<?php
function file_size_info($filesize)
{
 $bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');

 if ($filesize < 1024) $filesize = 1;

 for ($i = 0; $filesize > 1024; $i++)
 $filesize /= 1024;
 $file_size_info['size'] = ceil($filesize);
 $file_size_info['type'] = $bytes[$i];
 return $file_size_info;
 }
 $db_server = 'localhost';
 $db_user = 'root';
 $db_pwd = 'pwd';
 $db_name = 'bdd';
 $db_link = mysql_connect($db_server, $db_user, $db_pwd)  or exit('Could not connect: ' . mysql_error());
 $db = mysql_select_db($db_name, $db_link)  or exit('Could not select database: ' . mysql_error());
 // Déterminer le nombre d'enregistrements et la taille de la base de données en additionnant la taille de la table + la taille de l'index :
 $rows = mysql_query("SHOW TABLE STATUS");
 $dbSize = 0;
 $dbrows = 0;
 while ($row = mysql_fetch_array($rows))
 {
 $dbSize += $row['Data_length'] + $row['Index_length'];
 $dbrows += $row['Rows'];
 }
 $dbSizeKo = file_size_info($dbSize);
 print "Taille de la base de données : {$dbSizeKo['size']} {$dbSizeKo['type']} ($dbSize octets)<br />";
 print "Nombre d'enregistrements : $dbrows enregistrements<br />";
 ?>
 </body>
 </html>

A voir également

Ajouter un commentaire Commentaires
zulrigh Messages postés 24 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 7 juin 2014
26 juil. 2010 à 22:53
tres simpa comme code !!! Merci !
skyg Messages postés 1 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 29 avril 2008
29 avril 2008 à 14:14
Je ne trouve pas que que c'est une bonne idée de séparé le type d'unité et les unités.
Cette fonction marche pas mal du tout et rendra quelque chose d'exact.

function size_readable($size, $retstring = null)
{
$sizes = array('o', 'Ko', 'Mo', 'Go', 'To', 'Po', 'Eo', 'Zo', 'Yo'); if ($retstring null) { $retstring '%01.2f %s'; }

$lastsizestring = end($sizes);
foreach ($sizes as $sizestring)
{
if ($size < 1024) { break; }
if ($sizestring != $lastsizestring) { $size /= 1024; }
}
if ($sizestring $sizes[0]) { $retstring '%01d %s'; } // Bytes ne sont pas fractionnaire normalement ...

return sprintf($retstring, $size, $sizestring);
}

Du coup, le code devient :
$rows = mysql_query("SHOW TABLE STATUS");
$dbSize = 0;
$dbrows = 0;
while ($row = mysql_fetch_array($rows))
{
$dbSize += $row['Data_length'] + $row['Index_length'];
$dbrows += $row['Rows'];
}
echo 'Taille de la base de données : '.size_readable($dbSize).' ('.$dbSize.' octets)

';
echo 'Nombre d\'enregistrements : '.$dbrows.' enregistrements

';

Cdt.
Sky
Dexmon Messages postés 70 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 31 janvier 2009
9 janv. 2008 à 10:51
Et comment faire pour calculer le poids de toutes les bases de données appartenant à un seul utilisateur ?
cs_LysBleu Messages postés 1 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 septembre 2007
28 sept. 2007 à 21:42
rÉponse ;a
------------------------
query="SELECT COUNT(*) FROM MA_TABLE";
mon problème est comment mettre le resultat de cette requete dans une variable entière pour que je puisse l'utiliser dans une boucle for.
je veux la reponse le plus vite possible

et merci d'avance
--------------------------------

$query = "SELECT COUNT(*) as total FROM MA_TABLE";
$res = mysql_query( $query )
$row = mysql_fetch_object( $res )
$total = $row->total;
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
10 sept. 2006 à 02:05
Salut,

Une petite modification s'impose au niveau de la fonction file_size_info :

function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');

if ($filesize < 1024) $filesize = 1;

for ($i = 0; $filesize > 1024; $i++)
$filesize /= 1024;
$file_size_info['size'] = floor($filesize);
$file_size_info['deci'] = ceil(($filesize*1000)-(floor($filesize)*1000));
$file_size_info['type'] = $bytes[$i];
$file_size_info['type2'] = $bytes[$i-1];
return $file_size_info;
}

et pour l'affichage :

print "Taille de la base de données : {$dbSizeKo['size']} {$dbSizeKo['type']} et {$dbSizeKo['deci']} {$dbSizeKo['type2']} ($dbSize octets)
";

J'espère que c'est le résultat que tu cherches.

Bonne continuation.
Afficher les 26 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.