Sorry Dave, I can't do that :) Mandei o código de teste minimamente suficiente para causar o leak. O processo em si é um pouco mais elaborado. Aliás, o meu caso é exatamente o oposto do que você diz: na MAIORIA dos casos (99.9%), o registro já está lá.
ABS() 2011/11/11 Renato Santos <[email protected]> > Ideia? > não é melhor gerar um COPY ? > > Se der erro, remove a linha, tenta novamente... etc.. > > só não faz isso com muitos registros de uma vez (se for provavel ter um > erro) pois isso no postgres gera um LOG imenso de dead-rows. > > 2011/11/11 Stanislaw Pusep <[email protected]> > >> Trazendo pra cá a conversa com @edenc no Twitter :) >> Observei que um script meu (bastante simples) estava torrando 6GB de RAM >> mais 5GB de swap... >> Consegui isolar o seguinte trecho porcalhão: >> >> my $images = $schema->resultset('Image'); >> ...; >> while (my $url = <>) { >> ...; >> $images->find_or_create( >> { >> sampler_uid => $obj->uid, >> url => $url, >> }, >> { key => 'images_url_idx' } >> ); >> } >> >> Curiosamente, posso substituir find_or_create() por apenas find() e o >> resultado é o mesmo: acréscimo de alguns KB no processo para cada operação. >> Como tenho meio milhão de registros, deu no que deu. >> Tive que trocar por isso daqui e funcionou perfeitamente: >> >> my $images_insert = $schema->storage->dbh->prepare( >> 'INSERT INTO images (sampler_uid, url) VALUES (?, ?)' >> ); >> ...; >> while (my $url = <>) { >> ...; >> eval { >> $images_insert->execute($obj->uid, $url); >> }; >> } >> >> Antes disso, suspeitei que tivesse algo a ver com AutoCommit e encapsulei >> com txn_do() a cada 100 registros; deu na mesma. >> Também suspeitei do prepare_cached(), porém isso não faz o menor sentido, >> pois o statement é o mesmo para todas as queries. Anyway, tentei >> limpar $schema->storage->dbh->{CachedKids} periodicamente e também não >> adiantou. >> Por fim, tentei ver o que acontece xeretando através do Devel::Size. De >> fato, o objeto do ResultSet cresce indefinidamente. Porém todas as minhas >> tentativas de serializar o mesmo e descobrir o que está acontecendo via >> diff foram frustradas :( >> Any ideas? >> >> ABS() >> >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > Saravá, > Renato CRON Santos > http://www.renatocron.com/blog/ > @renato_cron <http://twitter.com/#!/renato_cron> > > > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
