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);
}

6582c1a9e7f357b4f2a3a8392c19706b.png

不知道是我的环境问题还是laravel 本身就有这个bug。




点赞 取消点赞 收藏 取消收藏

<< 上一篇: 关于npm run dev

>> 下一篇: laravel中Transformer