我正在运行一个查询和检索与OCI_FETCH_ARRAY
,我得到一个致命的错误,我击中一定数量的记录后内存不足。结果数组有100k行和大约60列。
我把php.ini中的memory_limit设置为2 gb。
memory_limit = 2056M
当我有不止一个人同时运行脚本时(或者同一个人在设置为在后台运行时运行两次),似乎会发生这种情况。只需要2个100k条记录的并发作业就会导致错误。我在OCI_FETCH_ARRAY上发现的一切都表明,它没有将整个结果集缓存到内存中,但看起来像是。
这是我的代码(非常直接)
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
array_push($resultfile,$row);
$tablerow=$tablerow +1;
unset($row);
}
OCI_FETCH_ARRAY语句在达到一定的循环次数后发生错误。
输出文件只有94m (avg),所以似乎我不应该在任何地方内存限制。
下面的代码导致高内存占用:
array_push($resultfile,$row);
oci_fetch_array是未缓冲的,这意味着它将逐个获取行,直到没有行存在。我建议不要将row推入另一个数组。相反,在while循环内部编写逻辑。