[perl] limite en taille des variables perl

limite en taille des variables perl [perl] - Perl - Programmation

Marsh Posté le 17-07-2003 à 17:19:29    

en perl (ligne de commande, pas cgi):
 
j'ai une requete SQL de bourrin qui recupere (SELECT) quelques 650 000 enregistrements d'une base et qui fout ca ds un tableau (fetchall_arrayref)   (la table fait 50mo pour info [:icon15])
le serveur m'envoie chier avec un "killed" au bout d'une minute environ  
apres qques tests (division de la requete en plusieurs) j'en deduis que c'est ptet pas mysql qui me lance un timeout... mais autre chose, d'ou ma question:
 
ya t'il une limite de taille des variables perl.. si oui, comment l'augmenter? (c un script de migration qui sera lancé qu'une seule fois donc RAF si ca rame ou koi :D)
 
merci :jap:
 
 
edit:
je le faisais sur une autre machine (ss mandrake) sans probleme avant :/  (là c une slack sur le server)


Message édité par Suri le 17-07-2003 à 17:21:16

---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 17-07-2003 à 17:19:29   

Reply

Marsh Posté le 17-07-2003 à 17:23:28    

taille de ta pile?

Reply

Marsh Posté le 17-07-2003 à 17:25:21    

ce serait pas plus malin de récupérer les enregistrements petit à peti tplutot que tout d'un coup ?
tu fetches 100 d'un coup par exemple


Message édité par noldor le 17-07-2003 à 17:25:49
Reply

Marsh Posté le 17-07-2003 à 17:26:47    

++Taz a écrit :

taille de ta pile?


 
j'ai mis a unlimited stacksize :??:
 
 
j'essaye en 2 fois en faisant un undef au milieu... là...
undef ca "free" bien la memoire?


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 17-07-2003 à 17:27:24    

noldor a écrit :

ce serait pas plus malin de récupérer les enregistrements petit à peti tplutot que tout d'un coup ?
tu fetches 100 d'un coup par exemple


c ce que je fais ..; mais je free pas :d


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 17-07-2003 à 17:31:07    

Suri a écrit :


 
j'ai mis a unlimited stacksize :??:
 
 
j'essaye en 2 fois en faisant un undef au milieu... là...
undef ca "free" bien la memoire?

oui, undef libère bien la mémoire

Reply

Marsh Posté le 17-07-2003 à 17:36:16    

je connais pas trop le perl, mais bon... c'est vrai que tu pourrais peut etre amélioré ton algo en une version moins bourrin. des mes souvenirs, je suis pas sur que undef soit suffisant, tu ferais bien de chercher un module qui permette de forcer la collecte du ramasse-miettes entre 2 opérations

Reply

Marsh Posté le 17-07-2003 à 17:37:14    

noldor a écrit :

oui, undef libère bien la mémoire


ok donc ca va ptet marcher alors :o  
 
merci :)


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 17-07-2003 à 17:48:12    

++Taz a écrit :

je connais pas trop le perl, mais bon... c'est vrai que tu pourrais peut etre amélioré ton algo en une version moins bourrin. des mes souvenirs, je suis pas sur que undef soit suffisant, tu ferais bien de chercher un module qui permette de forcer la collecte du ramasse-miettes entre 2 opérations


 
oauis mais bon.. moyen le tps la... tant que ca marche :o
 


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 17-07-2003 à 20:55:49    

Suri a écrit :


 
oauis mais bon.. moyen le tps la... tant que ca marche :o
 
 

et ça marche alors ?


---------------
http://runnerstats.net
Reply

Marsh Posté le 17-07-2003 à 20:55:49   

Reply

Marsh Posté le 17-07-2003 à 22:33:17    

le undef libere la memoire normalement, mais ca marche pas toujours, ca depend de ton perl..
 
Avec perl 5.6 d'activeState sous windows tu a beau faire des undef il libere quedale l'enflure!!
Avec le SiePerl 5.6 (toujours sous win) ca libere par contre
 
et l'activeState 5.8 libere aussi...
 
sous linux je sais pas
 
a priori c'est du au malloc utilisé pour compiler l'interpreteur.
 
Sinon oui un tableau ca prend pas mal de place en perl. tu aurais peut etre interet à mettre tout ca dans un scalaire?

Reply

Marsh Posté le 18-07-2003 à 09:26:01    

oui c bon, j'ai divisé ma requete en 2... execution & traitement de la premiere, undef, execution et traitement de la 2e..
 
c bourrin mais j'ai d'autres trucs plus importants [:ddr555]
 
merci :jap:


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 14-08-2003 à 11:01:03    

Any storage associated with the object will be recovered for reuse (though not returned to the system, for most versions of UNIX).
 
Ca répond à vos questions.
undef n'est pas une fonction pour libérer la mémoire...
c'est juste pour libérer l'espace et pouvoir le réutiliser pour autre chose (gestion faite par Perl), la mémoire n'étant pas forcément rendue au système.
 
d

Reply

Marsh Posté le 14-08-2003 à 15:24:03    

Oui mais cette FAQ dit des conneries
 
avec ma version de perl (5.8 d'acrive state) elle est effectivement rendue au systeme
 
avec les 5.6 d'activestate ce n'etait pas le cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed