laravel 的游标是假的?为啥我这里用游标就直接内存不足,打开方式不对?
$query = DB::table('table')
->where('company_id', 1)
->where('updated_at', '>', $last);
$fileHander = fopen($name . '.json', 'a');
foreach ($query->cursor() as $item) {
fwrite($fileHander, json_encode($item) . "\r\n");
unset($item);
}
fclose($fileHander);
####################################
终于解决了
解决办法如下
在开始查询之前设置下pdo
$query->getConnection()->getPdo()->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
加了后
Log::info('开始内存:'.memory_get_usage());
$query->getConnection()->getPdo()->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$i=0;
foreach ($query->cursor() as $item) {
if ($call) {
$call($item);
}
if(!$i){
Log::info('运行中内存:'.memory_get_usage());
}
$i++;
fwrite($fileHander, json_encode($item) . "\r\n");
unset($item);
}
不知道是我的环境问题还是laravel 本身就有这个bug。
无评论