服务器上有一个自动生成数据的程序,是从另一个数据库中获取生成的。
结果最近经常用户反应数据生成不完整,检查log发现是内存用满了,默认是128MB,于是调整为256MB,结果还是有问题,于是调整为1024MB,还是有问题。
这样就必须回头检查代码了,发现之前的代码是如此写的:
$sql2= "...";
$sth2 = $db->query($sql2);
$rows2 = $sth2->fetchAll();
foreach($rows as $k=>$v)
{
...
}
这样以来,若数据库中一次性取出的数据很大,就用使用太多的内存,于是修改代码,调整为:
$sql2= "...";
$sth2 = $db->query($sql2);
while($v=$sth2->fetch())
{
...
}
这样就应该能解决问题了。
总结:fetchAll速度会有所提升,但在大数据量下耗费内存直线上升。因此在合适的场景下可以选择用fetch迭代。
发表回复