Lou*_*sak 5 php mysql memory-leaks
当我对大约 60,000 条记录的用户表执行以下代码时:
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$result = mysql_query("select * from users");
while ($row = mysql_fetch_object($result)) {
echo(convert(memory_get_usage(true))."\n");
}
function convert($size) {
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
Run Code Online (Sandbox Code Playgroud)
关于如何避免脚本在每次循环时占用额外的内存有什么想法吗?在我的实际代码中,我尝试为大型数据集提供 CSV 下载,并进行一些 PHP 预处理。
请不要建议增加 PHP 的内存限制——这是一个坏主意,更重要的是,仍然会增加使用此技术可以处理的数据集的大小。
mysql_query将整个结果集缓冲到 php 内存中。这很方便并且通常非常快,但是您遇到了它的缺点。
mysql_unbuffered_query () 存在。它不会一次获取整个结果集。当您从结果集中获取行时,它会一次抓取一小部分。