PHP oci_fetch_array导致内存不足错误

时间:2015-09-11 16:13:22

标签: php oracle out-of-memory

我正在运行查询并使用OCI_FETCH_ARRAY进行检索,并且在达到一定量的记录后,我收到了致命错误,内存不足。结果数组是100k行和大约60列 我将php.ini中的memory_limit设置为2演出。

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(平均),所以看起来我不应该是任何内存限制。

1 个答案:

答案 0 :(得分:0)

下面的代码导致大量的内存使用:

array_push($resultfile,$row);

oci_fetch_array是无缓冲的,这意味着它将逐行读取行,直到不存在任何行。我建议不要将行推入另一个数组。而是在while循环本身内部编写您的逻辑。