[SP-pm] "leak" no DBIx::Class?
Stanislaw Pusep
creaktive at gmail.com
Fri Nov 11 05:40:29 PST 2011
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 <renato.cron em gmail.com>
> 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 <creaktive em gmail.com>
>
>> 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: SaoPaulo-pm em pm.org
>> 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: SaoPaulo-pm em pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20111111/dd184a4e/attachment.html>
More information about the SaoPaulo-pm
mailing list