我一直在运行一个循环,将 50,000 个数据集插入 MySQL 数据库。我托管空间上的服务器突然显示以下消息:
致命错误:第 14 行 /srv/www/htdocs/server/html/email.php 中允许的 20971520 字节内存大小已用尽(尝试分配 32 字节)
我知道这意味着什么,但是如何重置所有内存以便再次使用?
笔记:
我不想增加我的记忆,就像
ini_set('memory_limit', '-1');
但想完全释放它。
在大多数情况下,当您拥有来自 Provider 的共享系统时,您无法为自己设置内存限制。然后,当服务器上的每 100 个人设置更高的内存限制时,提供程序就会出现问题。
所以他们在你的情况下给出一个固定的大小 20MB 并禁用memory_limit功能。
20MB 不算多。当您尝试插入大量数据集时,您需要一些内存。这就是为什么会出现消息32 bytes from allowed memory 20971520 bytes的原因。
我认为 20MB 没有真正好的解决方案来解决这个问题。或许你可以尝试把一些逻辑放到数据库中,做一个存储过程。
我知道这是一个旧线程,但我发现了它,所以我认为值得为其他人发布。
我在尝试对每条记录中的单个字段执行批量系统更新时遇到了这个错误。记录被读入一个数组,处理并更新回数据库。我认为该错误是由存储在服务器阵列中的数据过多引起的。
为了解决这个问题,我将任务拆分为一次处理 1000 条记录。IE; (代码测试。
$r_count=1; $start_id=0; $end_id=1000;
while($r_count>0)
{
$strSQL="SELECT * from spAddbook
WHERE id > '$start_id' AND id <= '$end_id'";
$result = mysql_query($strSQL, $link) or die ("Couldn't read because ".mysql_error());
$r_count = mysql_num_rows($result);
echo"<br>$r_count found<br>";
if (mysql_num_rows($result))
{
while ($qry = mysql_fetch_array($result))
{
// Read the Data and carry out processing
}
}
$start_id+=1000; $end_id+=1000;
}
echo"<br><br>All Done";
我希望这有帮助..它对我有用。