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

  FORUM HardWare.fr
  Programmation
  Perl

  [Resolu]DBI::mysql -> out of memory

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]DBI::mysql -> out of memory

n°1622051
nORKy
Grmmph...
Posté le 11-10-2007 à 10:34:35  profilanswer
 

Bonjour,
 
Je ne sais pas vraiment si le probleme vient de Perl, mais, j'ai un soucis de mémoire.
J'utilise DBI::mysql pour faire un select sur une machine distante.
Ce select est simple, mais le nombre de ligne est très important (5 millions de lignes).
Mon script s'arrète à un moment avec ceci :
 

Code :
  1. 10:04 pc-joff# /usr/bin/time -h ./myselect.pl
  2. Out of memory (Needed 1477684 bytes)
  3. DBD::mysql::st execute failed: MySQL client ran out of memory at ./myselect.pl line 44.
  4. DBD::mysql::st fetchrow_array failed: fetch() without execute() at ./myselect.pl line 47.
  5.         7m13,75s real           2,84s user              2,38s sys


Certe, le script rempli presque ma mémoire RAM, mais j'ai encore 2G de swap de dispo...
D'ou vient cette limitation à votre avis ?
Il y a t-il une option à passé à DBI pour éviter une limite ??
 
Merci de votre aide


Message édité par nORKy le 11-10-2007 à 14:03:17
mood
Publicité
Posté le 11-10-2007 à 10:34:35  profilanswer
 

n°1622066
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-10-2007 à 10:50:41  profilanswer
 

AMHA, rien à voir avec DBI, le problème se situe la:

Citation :

SQL client ran out of memory


 
Tu peux eventuellement regarder le paramètrage du client mySQL ( mais à mon avis ça va servir à rien)
 
Maintenant la question c'est quel est l'intérêt d'un fetch sur 5 millions de ligne???
 
Perso j'opterais plus pour un "select into file" sous mysql, puis traitement du fichier en perl.

n°1622076
nORKy
Grmmph...
Posté le 11-10-2007 à 10:59:45  profilanswer
 

Les 5 millions de ligne représente en gros une ligne de squid (c'est pas du squid, mais peu importe).
Le but est de chopper ces lignes et faire une compression par domaine. Car tous les 2 jours, notre base explose.
D'ailleurs, savez vous pourquoi arrivé à 4G, la base se vautre ? Est-ce à cause de MyISAM ? Innodb pourrait-il corrigé ce problem ?
 
Je vais essayer avec select into file
Merci

n°1622129
Taz
bisounours-codeur
Posté le 11-10-2007 à 11:20:52  profilanswer
 

ça serait vraiment stupide de passer par un fichier ... avec un curseur ça ira tout seul. La limitation, c'est que tu es en 32bits et que de toutes façons, il est inutile de tout charger en RAM. Ta requête se passe comment depuis un shell

n°1622156
nORKy
Grmmph...
Posté le 11-10-2007 à 11:34:40  profilanswer
 

j'ai trouvé la solution
depuis le shell, il faut rajouter l'option --quick à mysql
en perl avec DBI, il faut activé un 'flag' :
$dbh->{'mysql_use_result'}=1;
 
Ca force l'API mysql à utiliser mysql_use_result() plutot que mysql_store_result().
En gros, au lieu de bufferiser tous le resultat, il renvoi ligne par ligne.
 
C'est pt etre plus lent, mais je consomme presque pas de mémoire, mon probleme est resolu.
Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Resolu]DBI::mysql -> out of memory

 

Sujets relatifs
[résolu] Moteur de recherche interne avec fichier pdfTester la connexion à X bases MySQL
[RESOLU] Comparer 2 fichiers de données[Delphi] fonction sur String [Résolu]
[Résolu]Probleme d'enregistrement - envoi de formulaire[Résolu] Probleme d'enregistrement lors d'un envoi de formulaire
[RESOLU] Enlever retour à la ligne entre balises HTML[Résolu] [Ajax-Rico] Réponse envoyée mais pas de mise à jour
[Résolu] WMI requete WQL[resolu]Besoin d'aide pour jointure sur mySQL
Plus de sujets relatifs à : [Resolu]DBI::mysql -> out of memory


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