PHP oci_fetch_array导致内存不足错误


PHP oci_fetch_array causing out of memory error

我正在运行一个查询和检索与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循环内部编写逻辑。