2012-04-08 7 views
0

Ich habe eine Schleife ausgeführt, wo ich 50.000 Datensätze in eine MySQL-Datenbank eingefügt habe. Plötzlich wird der Server auf meinem gehosteten Raum zeigt diese Meldung:Erlaubte Speichergröße erschöpft Fehler <Wie wird zurückgesetzt?

Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 32 bytes) in /srv/www/htdocs/server/html/email.php on line 14

Ich weiß, was es bedeutet, aber wie kann ich den gesamten Speicher zurücksetzen, so kann es wieder verwendet werden?

Hinweis:

Ich will nicht mein Gedächtnis erhöhen, wie mit

ini_set('memory_limit', '-1'); 

aber will es vollständig lösen.

+1

Die Chancen sind Ihr Skript neu geschrieben werden können, um dieses Problem zu vermeiden. –

+1

Dank John. Ich weiß, ich habe dies bereits getan Aber wie kann ich den Speicher freigeben, der jetzt blockiert zu sein scheint? –

+0

Das hängt von Ihrem Code ab ... –

Antwort

0

Wenn Sie in den meisten Fällen ein gemeinsam genutztes System von einem Provider haben, können Sie das Speicherlimit nicht selbst festlegen. Wenn dann alle 100 Personen auf dem Server ein höheres Speicherlimit festlegen, hat der Anbieter ein Problem.

Also geben sie eine feste Größe in Ihrem Fall 20MB und deaktivieren Sie die memory_limit Funktion.

20 MB ist nicht so viel. Und wenn Sie versuchen, viele Datensätze einzufügen, benötigen Sie etwas Speicher. Dies ist der Grund, warum die Nachricht 32 Bytes aus dem zulässigen Speicher 20971520 Bytes kommt.

Ich denke, mit 20MB gibt es keine wirklich gute Lösung, um dieses Problem zu lösen. Vielleicht können Sie versuchen, etwas Logik in die Datenbank zu setzen und eine gespeicherte Prozeduren zu machen.

+0

Vielen Dank für die detaillierte Antwort Stony. Wissen Sie, wie ich den Speicher zurücksetzen kann? Es scheint, als ob die Variablen immer noch mit Informationen aus einer Abfrage gefüllt sind, die ich vor zwei Tagen gemacht habe. Lustigerweise funktioniert die ini_set-Funktion, obwohl mein Anbieter Speichererweiterungen separat verkauft. –

+0

Entschuldigung für die späte Antwort. Ich habe diese Frage erneut gesehen. Und vielleicht sollten Sie Ihren Code hier hinzufügen. Vielleicht können wir diesen Code optimieren. Oder ist dieses Problem gelöst? – Stony

0

Ich weiß, das ist ein alter Thread, aber ich fand es, also denke ich, es lohnt sich, für andere zu posten.

Ich bin auf diesen Fehler gestoßen, als ich versuchte, ein Bulk-System-Update auf ein einzelnes Feld in jedem Datensatz durchzuführen. Die Datensätze wurden in ein Array eingelesen, verarbeitet und in die Datenbank zurückgeschrieben. Ich glaube, der Fehler wurde durch zu viele Daten im Array auf dem Server verursacht.

Um das Problem zu lösen, habe ich die Aufgabe aufgeteilt, um 1000 Datensätze gleichzeitig zu behandeln. ; d. H. (Code getestet.

$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"; 

Ich hoffe, das hilft .. Es ist für mich gearbeitet.

Verwandte Themen