...and no one cares!<div>If there is a hell</div><div>I see you there<br clear="all"><br>ABS()<br><br>
<br><br><div class="gmail_quote">2011/11/13 Alexei Znamensky <span dir="ltr"><<a href="mailto:russoz@gmail.com">russoz@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

God is dead<div class="HOEnZb"><div class="h5"><br><br><div class="gmail_quote">2011/11/13 Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<p>Eden has no god!<br></p>
<p>brincadeira!!!</p>
<p>@renato_cron</p>
<div class="gmail_quote">Em 13/11/2011 18:24, "Stanislaw Pusep" <<a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a>> escreveu:<div><div><div>

<div></div></div></div><div><br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Wallace: boa, fiz o downgrade para e funcionou perfeitamente... Na tentativa e erro, descobri que o *leak* foi introduzido no DBIx-Class-0.08194.<div>Eden: where is your God now?<br clear="all"><br>ABS()<br><br>
<br><br><div class="gmail_quote">2011/11/12 Eden Cardim <span dir="ltr"><<a href="mailto:edencardim@gmail.com" target="_blank">edencardim@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






>>>>> "Stanislaw" == Stanislaw Pusep <<a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a>> writes:<br>
<br>
    Stanislaw> Trazendo pra cá a conversa com @edenc no Twitter :)<br>
<br>
Exceto que no twitter você não foi tão educado :P<br>
<br>
    Stanislaw> ... (bastante simples) ...<br>
<br>
Deviam banir esse adjetivo do contexto de discussões técnicas.<br>
<br>
    Stanislaw> Consegui isolar o seguinte trecho porcalhão:<br>
<br>
    Stanislaw> my $images = $schema->resultset('Image');<br>
    Stanislaw> ...;<br>
    Stanislaw> while (my $url = <>) {<br>
    Stanislaw>     ...;<br>
    Stanislaw>     $images->find_or_create(<br>
    Stanislaw>         {<br>
    Stanislaw>             sampler_uid => $obj->uid,<br>
    Stanislaw>             url         => $url,<br>
    Stanislaw>         },<br>
    Stanislaw>         { key => 'images_url_idx' }<br>
    Stanislaw>     );<br>
    Stanislaw> }<br>
<br>
    Stanislaw> Curiosamente, posso substituir find_or_create() por apenas find() e o resultado é o mesmo: acréscimo de<br>
    Stanislaw> alguns KB no processo para cada operação.<br>
    Stanislaw> Como tenho meio milhão de registros, deu no que deu.<br>
<br>
,----[ <a href="http://test.pl" target="_blank">test.pl</a> ]<br>
| use strictures 1;<br>
|<br>
| use lib 'lib';<br>
|<br>
| use MyApp::Schema;<br>
| use Devel::Cycle;<br>
|<br>
| my $s = MyApp::Schema->connect('dbi:SQLite:database=test.db');<br>
|<br>
| my $images = $s->resultset('Foo');<br>
| for ( 0 .. 500000 ) {<br>
|   $images->find_or_create(<br>
|     { bar => qq{baz$_}  },<br>
|   );<br>
| }<br>
|<br>
| find_cycle($images);<br>
`----<br>
<br>
Rodei o trecho acima com um schema deduzido (já que você não forneceu o<br>
seu) gerado pelo dbicdump e não consegui reproduzir o "leak". Já tive<br>
problemas de leak com o DBIC há muito tempo atrás e eu mesmo ajudei a<br>
depurar. Mas com o DBIC mais recente (0.08195) e perl 5.14.2, o processo<br>
roda feliz da vida com 15MB, a equipe de core devs do DBIC é bastante<br>
responsiva e trabalha arduamente pra evitar e resolver problemas como<br>
isso. Tudo isso indica que há uma chance do leak ser em alguma<br>
customização sua, pode ser no DBIC também mas sem ver o seu schema na<br>
íntegra não tem como saber o que deu errado.<br>
<br>
A propósito, também testei na cópia de uma base de dados de produção com<br>
cerca de 200M registros ontem, acordei hoje e ainda estava rodando, mas<br>
o processo ainda ocupando cerca de 20MB de memória.<br>
<br>
    Stanislaw> Antes disso, suspeitei que tivesse algo a ver com AutoCommit e encapsulei com txn_do() a cada 100<br>
    Stanislaw> registros; deu na mesma.<br>
    Stanislaw> Também suspeitei do prepare_cached(), porém isso não faz o menor sentido, pois o statement é o mesmo para<br>
    Stanislaw> todas as queries.<br>
    Stanislaw> Anyway, tentei limpar $schema->storage->dbh->{CachedKids} periodicamente e também não<br>
    Stanislaw> adiantou.<br>
<br>
Nada disso faz sentido, e tudo isso que você mencionou acontece<br>
<br>
    Stanislaw> Por fim, tentei ver o que acontece xeretando através do Devel::Size. De fato, o objeto do ResultSet cresce<br>
    Stanislaw> indefinidamente. Porém todas as minhas tentativas de serializar o mesmo e descobrir o que está acontecendo<br>
    Stanislaw> via diff foram frustradas :(<br>
<br>
Verificar o tamanho do objeto não é o suficiente pra assertar um "leak"<br>
e como o objeto resultset nunca sai do escopo, não dá pra chamar isso de<br>
"leak". Leak é quando você para de usar um trecho de memória (no caso do<br>
perl, implicitamente, através da destrução de referências) e essa<br>
memória não volta a ficar disponível pro sistema. Uma das coisas que<br>
pode estar acontecendo é você ter configurado caching pros resultsets em<br>
algum outro lugar, nesse caso, é natural que o consumo de memória<br>
aumente sempre que você executar uma query, já que o resultado da query<br>
é armazenado em memória pra evitar uma segunda consulta.<br>
<br>
    Stanislaw> Any ideas?<br>
<br>
Sim, usa o trecho de código acima pra localizar o ciclo dentro do<br>
resultset, se for mesmo um leak, provavelmente vai apontar pra alguma<br>
customização sua.<br>
<span><font color="#888888"><br>
--<br>
Eden Cardim<br>
Software Engineer<br>
<a href="http://bit.ly/edencardim" target="_blank">http://bit.ly/edencardim</a><br>
<a href="http://twitter.com/#!/edenc" target="_blank">http://twitter.com/#!/edenc</a><br>
<a href="tel:%2B55%2073%209986-3963" value="+557399863963" target="_blank">+55 73 9986-3963</a><br>
</font></span><div><div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br>Alexei "RUSSOZ" Znamensky | russoz EM gmail com | <a href="http://russoz.org" target="_blank">http://russoz.org</a><br>

GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C<br>

<a href="http://www.flickr.com/photos/alexeiz" target="_blank">http://www.flickr.com/photos/alexeiz</a> | <a href="http://github.com/russoz" target="_blank">http://github.com/russoz</a><br>"I don't know... fly casual!" -- Han Solo<br>




</font></span><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div>