【发布时间】:2014-02-02 10:15:59
【问题描述】:
所以我一直在尝试 Laravel 在 Eloquent 中的分块,但我遇到了问题。考虑以下代码(我的问题的更简化版本):
$data = DB::connection('mydb')->table('bigdata')
->chunk(200, function($data) {
echo memory_get_usage();
foreach($data as $d) {
Model::create(
array(
'foo' => $d->bar,
...
//etc
));
}
}
所以当我运行以下代码时,我的内存输出如下所示:
19039816
21490096
23898816
26267640
28670432
31038840
因此,无需跳入php.ini 并更改memory_limit 值,任何线索为什么它不起作用?根据文档:“如果您需要处理大量(数千)条 Eloquent 记录,则使用 chunk 命令可以让您在不吃掉所有 RAM 的情况下做到这一点”。
我在 foreach 函数之后尝试了unset($data),但没有帮助。关于如何使用 chunk 的任何线索,或者我是否误解了它的作用?
【问题讨论】:
-
好的,在我们的查询将解决我们的问题之前,先添加
DB::disableQueryLog()。 -
正如您自己发现的那样,查询日志正在消耗内存。话虽如此,您还可以在构造函数中调整单个类的内存限制,如下所示:
ini_set('memory_limit', $this->memorylimit); -
使用 Laravel 调试栏获得更好的洞察力
标签: php memory-management laravel chunking