服务器上有一个自动生成数据的程序,是从另一个数据库中获取生成的。
结果最近经常用户反应数据生成不完整,检查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迭代。
发表回复