Site réalisé sur
une plate-forme Word et Web


OVH - Optimiser une base de données avec un petit script mysql - Optimize base

@logo_WordEtWeb_mini

 

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";

 

?>