読者です 読者をやめる 読者になる 読者になる

PHPのZend_DB_Statement、1.5万人×12ヶ月分のレコードを取得するqueryを書いてfetch()で回して集計してたのですが、人が増えて4万人を超えた辺りでメモリ2Gbyte強喰ってout of memoryでコケてアレ。
Zend Framework関係のどこ探してもfetchAllじゃなくてfetchしたときに全レコード取得するとは書いてないし、初回にfetch()したタイミングでオーバフローするならともかくforeachである程度取得した後にオーバーフローとか内部処理のメモリ管理がどうなってんのかアレですよ。


まぁしょうがないので、queryを1ヶ月分取得に書き換えてmonth iterator使って12ヶ月分ループしたらmaxで300Mbyte程度で処理できる様に。カーソルが通り過ぎた行なんかいらないのに、ライブラリ側がホンキで解放していなかったのか‥‥?