mysqli使用的内存比mysql多得多,耗尽了memory_limit

时间:2017-03-20 02:35:23

标签: php mysql mysqli php-5.6

我正在尝试更新当前仍在使用mysql功能的旧应用。不幸的是,对于mysqli,应用程序在mysql从未执行过的情况下内存不足(而且,老实说,它不应该)。使用mysql,进程可能达到50 MB,这表明它在空闲集大小之上分配了8-15 MB。使用mysqli时,它会耗尽限制(128)甚至达到256 MB而不会闪烁(只需加载索引页)。有些事情是对的。切换到mysqli时,我收到此错误:

  

致命错误:允许的内存大小为134217728字节耗尽(尝试分配9072253字节)

"试图分配"字节数每次都在变化,它不是常数。该应用程序确实有一个抽象类,所以我开始通过强化它并用mysqli实例替换调用(OOP,而不是程序)。重写所有查询将花费很长时间,并且目前在资源方面是不可行的。我安装了mysqlnd。目前在PHP 5.6.30上。

代码在故障排除方面发生了很大变化,但这是query方法的一个变体:

$result = $connection->query($sql);
$data = Array();
$i = 0;
while ($r = $result->fetch_assoc())
    $data[$i++] = $r;

$ret = new stdClass();
$ret ->row = isset($data[0]) ? $data[0] : Array();
$ret ->rows = $data;
$ret ->num_rows = $i;

$result->free();
unset($data);
return $ret ;

我尝试过使用MYSQLI_USE_RESULT和一些不同的方法来迭代/收集查询结果,例如fetch_all,引用分配,没有while循环,但没有一个帮助

我的下一步可能是尝试一个PDO实例......

0 个答案:

没有答案