|
OVH - Optimiser une Base de Données via un script
mysqli -
Optimize base
Mise à jour du 4 avril 2018 Avec le temps une base de données grossit et peut atteindre la taille limite fixée par OVH. OVH bloque alors les accès en écriture de la base et le site peut être bloqué. Même si vous avez supprimé des articles de votre CMS (Wordpress, Joomla, etc.) la taille de la base de données ne réduira pas pour autant. En effet, à un article correspond un ou plusieurs enregistrements dans les tables de la base de données. Supprimer un article revient à supprimer le contenu de ces enregistrements, mais ces enregistrements existent toujours et occupent la même place (vides ou pleins). La seule manière de réduire la taille d’une base de données est de réduire la taille de chacune des tables qui la composent. Si la base de données est bloquée en écriture, il faudra, au préalable, demander à OVH le déblocage de la base. La commande qui permet de supprimer les enregistrements vides d’une table (et donc de réduire sa taille) est : OPTIMIZE TABLE ‘Nom de la table’ Pour faire cette opération voici un petit script « optimize_BASE.php » qui va : · Ouvrir une connexion à la base, · Donner la taille réelle de la base actuelle, · Optimiser (réduire) toutes les tables de la base, · Donner la taille réelle de la base après réduction, · Fermer la connexion. OVH -
Script de réduction de base de données
- « optimize_BASE.php »
<?php error_reporting(E_ALL); // Activer le rapport d'erreurs PHP // A partir de PHP 5.6, sinon les caractères
accentués seront mal affichés ini_set('default_charset', 'iso8859-1'); function
getmicrotime() { list($usec,
$sec) = explode(" ",microtime()); return ((float)$usec
+ (float)$sec); }
$Date_start
= getmicrotime(); // Soit « MaBase » le nom de la base de données. // ******
Configuration - Debut ******
$DBhost = "MaBase.mysql.db"; // Par exemple $DBowner =
"MaBase"; // ton login SQL $DBpw = ""; // ton password SQL
$DBName = $DBowner; // ******
Configuration - Fin ****** $Date_start = getmicrotime(); echo " Debut optimisation de la
base=<b>".$DBowner."</b>
- \$DBhost=<b>".$DBhost."</b><br> \n"; echo "<br> \n"; //
Etablissement de la connexion SQL $DATABASE_LINK = mysqli_connect($DBhost,
$DBowner, $DBpw); mysqli_select_db($DATABASE_LINK,
$DBName) or die('Connexion
impossible'); echo " Etablissement de la connexion
SQL au serveur <b>".$DBhost."</b> - Base de donnees
<b>".$DBowner."</b> <br> \n"; echo "<br> \n"; // Calcul de la taille de la base $sql_query = "SHOW TABLE STATUS FROM
`$DBName` "; $result_query=mysqli_query($DATABASE_LINK,
$sql_query); $Erreur = mysqli_error($DATABASE_LINK); if (strlen($Erreur) > 0) { echo "Lecture états de la base
".$DBName." -
Erreur=<b>".mysqli_error($DATABASE_LINK)."</b> -
\$sql_query=<b>$sql_query</b> - \$result_query=<b>$result_query</b>
<br> \n"; exit; } $result_count_row = mysqli_num_rows($result_query);
$count = 0; $Base_Size = 0; $Tableau_tables = array(); while ($result_query &&
$row=mysqli_fetch_row($result_query)) { $count = $count + 1; $Table_Name = $row ['0']; // Nom de la table $Table_Size = $row ['6']; // Taille de la table $Tableau_tables ["$Table_Name"]
= $Table_Size; $Base_Size += $Table_Size; } echo "Taille de la base
<b>".$DBName."</b> <i>(serveur
'<b>".$DBhost."</b>')</i> =
<b>".$Base_Size."</b> octets<br> \n"; echo "<br> \n"; // OPTIMIZE - Réduction de la taille des
tables reset ($Tableau_tables); while(list($Table_Name, $Table_Size) =
each($Tableau_tables)) { mysqli_query($DATABASE_LINK,'CHECK
TABLE '.$Table_Name) or die('Erreur
check '.$Table_Name); mysqli_query($DATABASE_LINK,'REPAIR
TABLE '.$Table_Name) or die('Erreur
repair '.$Table_Name); mysqli_query($DATABASE_LINK,'ANALYZE
TABLE '.$Table_Name) or die('Erreur
analyze '.$Table_Name); mysqli_query($DATABASE_LINK,'OPTIMIZE
TABLE '.$Table_Name) or die('Erreur optimize '.$Table_Name); echo "Réduction/ Optimisation de la
tables <b>".$Table_Name."</b> - Taille avant optimisation
=<b>".$Table_Size."</b><br> \n"; } echo "<br> \n"; echo "Réduction/ Optimisation des
tables de la base <b>".$DBName."</b> <i>(serveur
'<b>".$DBhost."</b>')</i> <font
color=blue><b>terminée</b></font> <br> \n"; echo "<br> \n"; // Calcul de la taille de la base $sql_query = "SHOW TABLE STATUS FROM `$DBName`
"; $result_query=mysqli_query($DATABASE_LINK,
$sql_query); $Erreur = mysqli_error($DATABASE_LINK); if (strlen($Erreur) > 0) { echo "Lecture états de la base
".$DBName." -
Erreur=<b>".mysqli_error($DATABASE_LINK)."</b> - \$sql_query=<b>$sql_query</b>
- \$result_query=<b>$result_query</b> <br> \n"; exit; } $result_count_row =
mysqli_num_rows($result_query); $count = 0; $Base_Size = 0; $Tableau_tables = array(); while ($result_query && $row=mysqli_fetch_row($result_query))
{ $count = $count + 1; $Table_Name = $row ['0']; // Nom de la table $Table_Size = $row ['6']; // Taille de la table $Tableau_tables
["$Table"]['Table_Name'] = $Table_Name; $Tableau_tables
["$Table"]['Table_Size'] = $Table_Size; $Base_Size += $Table_Size; } echo "Taille de la base
<b>".$DBName."</b> <i>(serveur
'<b>".$DBhost."</b>')</i> =
<b>".$Base_Size."</b> octets<br> \n"; // Fermeture de la connexion mysqli_close($DATABASE_LINK); $Date_end = getmicrotime(); $Duree = $Date_end - $Date_start; $Duree = sprintf("%01.2f",
$Duree); echo " <br> Durée du traitement =
<b>$Duree</b> secondes <br> \n"; ?> |
|