DBI::mysql -> out of memory [Resolu] - Perl - Programmation
Marsh Posté le 11-10-2007 à 10:50:41
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.
Marsh Posté le 11-10-2007 à 10:59:45
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
Marsh Posté le 11-10-2007 à 11:20:52
ç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
Marsh Posté le 11-10-2007 à 11:34:40
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
Marsh Posté le 11-10-2007 à 10:34:35
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 :
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