Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1551 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Comment diminuer (optimiser ?) la taille d'un base

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[MySQL] Comment diminuer (optimiser ?) la taille d'un base

n°1282887
jerkeve
Posté le 13-01-2006 à 12:47:19  profilanswer
 

bonjour,
 
j'ai une table de plus de 7000 entées qui commence à devenir un peu lourde (donc qui ralentit, et qui devient pénible à sauvegarder) : pres de 5MO.
 
Y-a-t'il des méthodes pour la "dégraisser", ou pour optimiser sa taille ?
j'ai utilisé la fonction optimize table qui n'a apparemment pas changé grand chose...  
 
merci de vos conseils  :)


Message édité par jerkeve le 13-01-2006 à 12:48:17
mood
Publicité
Posté le 13-01-2006 à 12:47:19  profilanswer
 

n°1282893
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 12:57:26  profilanswer
 

et si tu donnais la structure ? 7000 lignes et 5Mo ça fait pas mal d'octets par ligne :eek:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1282903
Tamahome
⭐⭐⭐⭐⭐
Posté le 13-01-2006 à 13:14:53  profilanswer
 

passer sous sql server :o


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1282907
amnesiks
Posté le 13-01-2006 à 13:23:29  profilanswer
 


Avant de construire une table il faut essayer de reflechir à une structure robuste, cohérente et qui empeche la duplication des données.
 
Si tu vois que ta table contient énormement de colonnes et que les données se repètent, alors tu as un problème de structure, et tu dois essayer de la séparer en plusieurs tables.
 
Je suis pas convaincu que passer sous sql server change quoi que ce soit à ce problème, c'est pas un probleme de langage ou de logiciel, c'est un probleme de gestion de base de données en général.

n°1282967
jerkeve
Posté le 13-01-2006 à 14:04:41  profilanswer
 

j'avais essaye de refléchir avant, je ne pense pas qu'il y ait des données dupliquées, mais c'est ne base dans laquelle les champs sont souvent des champs de type txt (base de données pour accueillir des critiques de livres, les littéraires sont des verbeux :))
 
je ne crois pas que ce soit la structure qui soit en cause. c'est la base elle meme qui fait 5MO, pas une table particulière.
 
Donc pas de méthode "code" pour un nettoyage quelconque ou une compression des données inutilisées ... ?

n°1282987
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 14:33:09  profilanswer
 

c'est un peu incohérent ton histoire..
 
c'est une table ou la somme des tables qui fait 5Mo ?
 
tu as des données "inutilisées" ? tu peux pas les mettre à part ou séparer un peu plus tes infos ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1282991
jerkeve
Posté le 13-01-2006 à 14:36:30  profilanswer
 

c'est la base, le fichier base.sql si tu veux, qui fait pres de 5MO
Non, je ne pense pas avoir de données inutilisées. ma question etait : y a-t-il des methodes de compression par exemple.
Si c'est non, tant pis, mais je ne vois pas ce qu'il y a d'incohérent dans cette question ...

n°1282996
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 14:45:55  profilanswer
 

la base et le dump c'est pas tout à fait la même chose (surtout si c'est un dump avec un INSERT pour chaque ligne)
 
donc en fait le problème c'est que c'est long à restaurer / sauvegarder c'est ça ? et tu utilise phpmyadmin pour faire tout ça ?
 
non, pas de compression disponible autre que la compression du dump une fois généré
 
par contre il est possible de sauvegarder structure d'un coté et contenu dans un CSV, c'est moins lourd (mais faut avoir pris ses précautions avant, surtout si t'as des textes, ou bien choisir ses délimiteurs)
 


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283011
jerkeve
Posté le 13-01-2006 à 14:59:52  profilanswer
 

merci de ta reponse :)
oui et non pour la sauvegarde :  
j'utilise aussi un script php que j'ai fait, et qui se lance automatiquement tous le soirs avec un cron; et justement le pb c'est qu'il met maintenant plus de 30sec à s'executer (limitation PHP de mon serveur...), et du coup il faut faire ces sauvegardes "à la main" avec PHPmyadmin...
Je n'avais pas pensé à gérer à part la structure et les données, mais je crains que ce ne soit pas la structure qui soit lourde???
 
je vais sinon voir du cote d'une 2eme base à partir de l'enregistrement 10 000 par exemple, mais ca va etre lourd en code :-/ ...


Message édité par jerkeve le 13-01-2006 à 15:01:41
n°1283017
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 15:02:48  profilanswer
 

si tu veux séparer facilement tes données, regarde du coté du type MERGE (marrant, ça fait déjà 2 fois aujourd'hui que j'arrive à  le caler celui là)
 
et tu devrais aussi refaire / vérifier ton script et les index
 
pour le CSV, c'est la méthode de chargement qui est plus efficace, le dump SQL c'est lourd comme tout


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
mood
Publicité
Posté le 13-01-2006 à 15:02:48  profilanswer
 

n°1283020
Tamahome
⭐⭐⭐⭐⭐
Posté le 13-01-2006 à 15:04:24  profilanswer
 

ma solution avec sql server n'etait pas idiote :o


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1283021
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 15:04:59  profilanswer
 

Tamahome a écrit :

ma solution avec sql server n'etait pas idiote :o


 
certes, mais un poil plus onéreuse [:aloy]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283028
jerkeve
Posté le 13-01-2006 à 15:12:39  profilanswer
 

c'est plus leger ?
quels sont les avantages ? je ne me suis jamais posé la question, au fond...

n°1283041
jerkeve
Posté le 13-01-2006 à 15:22:23  profilanswer
 

Sh@rdar a écrit :


 
pour le CSV, c'est la méthode de chargement qui est plus efficace, le dump SQL c'est lourd comme tout


 
euh... que veux tu dire concretement pas là ??? je suis  [:alex_]  , dsl, mais je ne vois pas ?


Message édité par jerkeve le 13-01-2006 à 15:22:52
n°1283042
omega2
Posté le 13-01-2006 à 15:23:59  profilanswer
 

La méthode la plus rapide pour faire une sauvegarde mysql, c'est un 'select into outfile "nom du fichier" ' et son acolite "load data infile".
Là où je bosse on arrive à sauvegarder 7 Go de données en moins de 30 minutes soit 3.8 Mo/s si je me trompe pas.
Par contre, il faut avoir le droit pour faire ça et il faut aussi avoir un serveur pas trop saturé. Le notre est puissant avec des disques SCSI et le nombre de requettes par secondes est assez faible à l'heure où on fait la sauvegarde.
Avec cette méthode, il faut pas oublier de faire en plus une requette pour obtenir une sauvegarde de la structure de la base.

n°1283050
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 15:29:42  profilanswer
 

la manière d'insérer les données n'est pas la même [:spamafote]
 
sinon tu peux utiliser du INSERT DELAYED aussi


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283055
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-01-2006 à 15:33:39  profilanswer
 

IMHO si ça rame avec 7000 lignes ( ce qui n'est vraiment pas grand chose même pour mysql) je pencheraiss plus pour une absence d'indexes qui vont bien et/ou a des requêtes mal ecrites...
 
edit: question par ailleurs ta table tu lui a mis quel type? MyISAM?


Message édité par anapajari le 13-01-2006 à 15:35:57
n°1283057
jerkeve
Posté le 13-01-2006 à 15:34:17  profilanswer
 

OK Sh@rdar merci. J'ai fait un test "manuel" d'exportation de la base en CSV et non plus MySQL, effectivement les poind du fichier est divisé par deux.
 
Reste plus qu'à trouver un nouveau script pho ou autre pour exporter ca automatiquement (c'est le but final...)
 
> anapajari : ce n'est pas l'utilisationde la base qui rame... ce qui doit etre indexe l'est, c'est la sauvegarde...

Message cité 1 fois
Message édité par jerkeve le 13-01-2006 à 15:35:30
n°1283058
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 15:34:40  profilanswer
 

c'est pas grand chose tout court :o une base qui rame c'est une base mal conçue, pas trop peuplée :o


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283059
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 15:35:30  profilanswer
 

jerkeve a écrit :

OK Sh@rdar merci. J'ai fait un test "manuel" d'exportation de la base en CSV et non plus MySQL, effectivement les poind du fichier est divisé par deux.
 
Reste plus qu'à trouver un nouveau script pho ou autre pour exporter ca automatiquement (c'est le but final...)


 
 
fait attention avec tes champs textes, ils doivent être bourrés de \r\n et la réimportation n'est pas gagnée :o


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283062
jerkeve
Posté le 13-01-2006 à 15:37:21  profilanswer
 

Sh@rdar a écrit :

fait attention avec tes champs textes, ils doivent être bourrés de \r\n et la réimportation n'est pas gagnée :o


 
 
vi... je me posais la question...

n°1283259
couak
Posté le 13-01-2006 à 19:54:00  profilanswer
 

7000 entrées, 5Mo :/ moi je trouve ca léger
si le problème est un problème de performances, je pense que, comme le dit anapajari ca doit être des tables qui n'ont pas de bons indexes
pour la sauvegarde, si tu as la main sur le serveur, ne fais pas tes scripts de backups en PHP

n°1283264
jerkeve
Posté le 13-01-2006 à 19:59:14  profilanswer
 

merci couak, je ne pense pas que ce soit un pb de table ou d'index, ca doit etre correct sur ce plan là. Un table qui content des livres entier ce n'ets pas la meme chose q'une table de forum...  
 
par contre je suis effectivement en train de voir une solution pour récuperer la base compressee avec un script shell qui ne sera pas limité par la limite du php.ini (30 sec. d'execution.. c'ets court!)
Ca devrait marcher... il ne me manque que 20 sec. au plus.

n°1283296
Sh@rdar
Ex-PhPéteur
Posté le 13-01-2006 à 20:23:27  profilanswer
 

tu veux vraiment pas la filer ta structure ? :o


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°1283636
couak
Posté le 14-01-2006 à 16:55:03  profilanswer
 

pourquoi tu ne fais pas un dump de la base avec mysqldump ?

n°1283792
jerkeve
Posté le 14-01-2006 à 23:13:23  profilanswer
 

couak a écrit :

pourquoi tu ne fais pas un dump de la base avec mysqldump ?


 
c'est ce que je vais faire, effectivement  :)  
 
> Sh@rdar : je ne vois pas l'interet, c'est long il y a 15 tables, et je sais tres bien qu'il n'y a pas de pb de structure à priori   :hello:  
 
Merci à tous de votre aide, c'est réglé avec un sauvegarde par shell

n°1284464
cinocks
Posté le 16-01-2006 à 13:48:05  profilanswer
 

jerkeve a écrit :

c'est la base, le fichier base.sql si tu veux, qui fait pres de 5MO
Non, je ne pense pas avoir de données inutilisées. ma question etait : y a-t-il des methodes de compression par exemple.
Si c'est non, tant pis, mais je ne vois pas ce qu'il y a d'incohérent dans cette question ...


 
le dump (*.sql) est un ensemble de requetes d'insertion qui prend beaucoup plus de place que la base. avant transfert tu peux faire une compression de celui-ci (gzip).


---------------
MZP est de retour
n°1284469
cinocks
Posté le 16-01-2006 à 13:52:41  profilanswer
 

comme annoncé, si tu peux faire un mysqldump, ca reglera tes problemes. Pour un ordre d'idée, j'ai 40Mo de base, 500 000 enregistrements. Et le dump se fait en 20 seconde sur une vieille becane avec un disque merdique.


---------------
MZP est de retour
n°1284482
Paul JR
Posté le 16-01-2006 à 13:58:48  profilanswer
 

Le probleme des portails c'est que tout est stoqué en base de données, ta base n'à pas fini de grossir, la ce que tu as c'est rien ca va devenir énorme avec le temps.
 
Il va soit falloir en tenir compte dans ton hébergement, soit revenir à des méthodes "anciennes", c'est à dire avoir des ressources en pages "statiques", pages statiques que tu référence dans ton portail. Le portail ne devrais te servir qu'à référencer des ressources, pas à stoquer des ressources.
 
Mais si tu stoque tout dans ton logiciel de portail, ta base va continuer à grossir, et les perfs vont se dégrader, à moins d'avoir un serveur dédié très puissant avec beaucoup de RAM.
 
Plusieurs sites important on du finir par fermer à cause de ce problême. Il faut soit passer en serveur dédié, soit revenir à du statique (même partiellement)

Message cité 1 fois
Message édité par Paul JR le 16-01-2006 à 14:00:13
n°1284519
jerkeve
Posté le 16-01-2006 à 14:23:48  profilanswer
 

cinocks a écrit :

comme annoncé, si tu peux faire un mysqldump, ca reglera tes problemes. Pour un ordre d'idée, j'ai 40Mo de base, 500 000 enregistrements. Et le dump se fait en 20 seconde sur une vieille becane avec un disque merdique.


 
euh... concrètement, tu fais quoi ? Comment fais tu pour compresser dynamiquement ce fichier ? je ne vois pas trop ...
 

Paul JR a écrit :

Il faut soit passer en serveur dédié, soit revenir à du statique (même partiellement)


 
Pour le statique.. je ne vois vraiment pas comment faire avec une boutique de 10 000 produits évolutifs ... le dédié, peut etre, mais pas le statique

Message cité 1 fois
Message édité par jerkeve le 16-01-2006 à 14:26:14
n°1284538
omega2
Posté le 16-01-2006 à 14:31:17  profilanswer
 

D'un autre côté, de trés nombreux sites dont certain assez gros continuent à grossir sans être sur du dédiés. Mais c'est vrai qu'ils ne sont pas resté, par exemple, chez free.
Le dédiés, c'est vraiment quand on en a besoin, il y a aussi de trés bons mutualisés qui arrivent à garder de bonnes performance.
En fait, avant de passer au dédié, il faut d'abord vérifier l'analyse de la base et entre autre les index pour être sur de ne pas perdre 95% du temps sur des bétises du à un mauvais index ou un index oublié. Il faut aussi vérifier si on a codé le site intélligement. (on a déjà vu sur ce forum des personnes qui cherchaient la liste des messages et qui ensuite refaisaient une requette par message pour avoir les infos du posteur)
 
Comme quoi, il faut pas généralisés à la va vite surtout sur ce genre de sujet.

n°1284548
jerkeve
Posté le 16-01-2006 à 14:36:20  profilanswer
 

Pour le serveur, je suis sur du "tres bon mutualisé", chez Quetzal Network : ils ont leur propre salle blanche, et des BP non sur-bookées, en principe effectivement le pb ne vient pas de là...

n°1284551
cinocks
Posté le 16-01-2006 à 14:38:08  profilanswer
 

jerkeve a écrit :

euh... concrètement, tu fais quoi ? Comment fais tu pour compresser dynamiquement ce fichier ? je ne vois pas trop ...
 
 
 
Pour le statique.. je ne vois vraiment pas comment faire avec une boutique de 10 000 produits évolutifs ... le dédié, peut etre, mais pas le statique


 
Pas de compression dynamique. Le dump n'est qu'une copie textuelle du contenu de la base. Ce n'est pas les fichiers propres à la base. ;). une fois le dump, je compresse par gzip.
 
Mais ca ne compresse pas la base.


---------------
MZP est de retour
n°1284557
jerkeve
Posté le 16-01-2006 à 14:39:55  profilanswer
 

ah! alors ok :)

n°1284562
cinocks
Posté le 16-01-2006 à 14:42:27  profilanswer
 

mais j'ai du mal à cerner ton probleme. C'est bien le dump qui te gene?


---------------
MZP est de retour
n°1284570
jerkeve
Posté le 16-01-2006 à 14:46:10  profilanswer
 

oui, je le lance dynamiquement par un cron, et depuis script PHP.
Le pb venait du fait que le script met plus de 30 sec. à s'éxécuter, et donc le serveur l'empeche de se terminer puisque le php.ini impose cette limitation de 30 sec. Comme je suis sur du mutualisé, et que l'admin ne veut pas toucher à cette limitation (pour des pb de saturation en cas de scripts en boucle par exemple, je peux le comprendre), du coup ... je ne peux plus faire ce dump dynamiquement.
 
Sauf avec un shell, puisque dans ce cas je ne suis pas limité par le temps, c'ets ce que m'a proposé l'admin du serveur, et ca marche.
 
:)

n°1284578
cinocks
Posté le 16-01-2006 à 14:50:16  profilanswer
 

ca me parait plus coherent. C'est ton script qui faisait l'extraction des données?


---------------
MZP est de retour
n°1284637
jerkeve
Posté le 16-01-2006 à 15:29:29  profilanswer
 

oui

Citation :


<?php
function mysql_structure() {
 
  $host = 'xxxxxxxxxx';
  $user = 'xxxxxxxxxx';
  $pass = 'xxxxxxxxxx';
  $base = 'xxxxxxxxxx';
   
  mysql_connect($host, $user, $pass);
  mysql_select_db($base);
  $tables = mysql_list_tables($base);
  while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $res = mysql_query("SHOW CREATE TABLE $table" );
    if ($res)
      {
      $insertions = "";
      $tableau = mysql_fetch_array($res);
      $tableau[1] .= ";";
      $dumpsql[] = str_replace("\n", "", $tableau[1]);
      $req_table = mysql_query("SELECT * FROM $table" );
      $nbr_champs = mysql_num_fields($req_table);
      while ($ligne = mysql_fetch_array($req_table))
        {
        $insertions .= "INSERT INTO $table VALUES(";
        for ($i=0; $i<=$nbr_champs-1; $i++)
          {
          $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
          }
        $insertions = substr($insertions, 0, -2);
        $insertions .= " );\n";
        }
      if ($insertions != "" )
        {
        $dumpsql[] = $insertions;
        }
      }
    }
  return implode("\r", $dumpsql);
  }
 
 
// creation d'une fonction file_put_content (serveur PHP4) :
if(!function_exists('file_put_contents')) {
 function file_put_contents($filename, $data, $file_append = false) {
  $fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
  if(!$fp) {
   trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
   return;
  }
  fputs($fp, $data);
  fclose($fp);
 }
}
 
// et envoi du fichier de dump sur le même niveau que ce fichier dump.php
echo "Dump OK : ".file_put_contents("sqldump-".$base."-".date("Ymd-His" ).".sql", mysql_structure());
?>


Message édité par jerkeve le 16-01-2006 à 15:33:46
n°1284658
cinocks
Posté le 16-01-2006 à 15:39:39  profilanswer
 

et pourquoi ne pas appeler la commande mysqldump depuis le script.


---------------
MZP est de retour
n°1284667
jerkeve
Posté le 16-01-2006 à 15:42:37  profilanswer
 

euh ... je ne me suis pas pose la question qd j'ai cree celui la... C'est plus efficace et / ou rapide que mon script ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Comment diminuer (optimiser ?) la taille d'un base

 

Sujets relatifs
[MySQL] Sélection d'un même champs dans plusieurs tables[CSS] Comment optimiser le chargement des pages avec un menu fixe
probléme MySql et visual.net 2003[Resolu] [PHP-MySQL] Serveur MySQL derrière un proxy
Créer une requete SELECT a une base de donnée ACCESSErreur identifiant Mysql
kit administration d'une base de données postgresqlPort 0 changer le port sur MySQL
Taille de page apres publipostage à contraindre(Resolu)Questionnaire en ligne........en PHP / MySQL
Plus de sujets relatifs à : [MySQL] Comment diminuer (optimiser ?) la taille d'un base


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR