[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