何十万件もあるデータで
my $limit = 1000; my $offset = 0; while(1) { my $rs = models("Schema::Hoge")->search({},{ limit => 1000, offset => $offset, }); last if $rs->count <= 0; while(my $row = $rs->next) { #何らかの処理 ... } $offset+= $limit }
みたいな処理を書いていた。 この処理の意図としては、allでとってきちゃうとDBICのオブジェクトがドットメモリにのって 死ぬから1000件ずつ処理すれば安心じゃんといった狙いがあったんだけど、ここでoffsetが1000,2000,3000...と増えていくとrow readsも同様に増えていく。
数十万件もあるデータに同様の処理をするとrow readsも同様に増えて簡単にサーバーが 死んでしまいます。
学び!