Sto scrivendo uno script batch e ottengo un errore Allowed memory size of 134217728 bytes exhausted
.Perché "La dimensione della memoria consentita è esaurita"?
Non capisco perché la memoria si sta riempiendo. Ho provato a disattivare la variabile $row
, ma questo non ha cambiato nulla. Ecco il mio codice:
// ... (sql connection)
$result = mysql_query("SELECT * FROM large_table");
while ($row = mysql_fetch_array($result)) {
echo $row['id'] . PHP_EOL;
unset($row);
}
(codice semplificato)
Perché la memoria riempire, e come posso evitarlo?
Nota: questo è uno script batch. È normale che io gestisca dati del genere (oltre 1 milione di righe).
Aggiornamento: la memoria esaurita si verifica intorno alla 400 000a linea, quindi deve essere qualcosa nel ciclo? Mi piacerebbe evitare di dover implementare il paging, se possibile.
E non sembra che si dovrebbe esaurire la memoria da quel frammento di codice. C'è qualche altra variabile che sta crescendo ogni iterazione? –
la query mysql non restituirà effettivamente l'intera tabella -> significa che il risultato verrà conteggiato nella memoria utilizzata? – KillerX
Potrebbe essere un suggerimento stupido, ma è l'unica cosa che posso pensare: forse potresti provare a svuotare il buffer di output? – Martijn