Estoy escribiendo un script por lotes y obtengo un error de Allowed memory size of 134217728 bytes exhausted
.¿Por qué "Se ha agotado el tamaño de memoria permitido"?
No entiendo por qué la memoria se está llenando. Intenté desarmar la variable $row
, pero eso no cambió nada. Aquí está mi código:
// ... (sql connection)
$result = mysql_query("SELECT * FROM large_table");
while ($row = mysql_fetch_array($result)) {
echo $row['id'] . PHP_EOL;
unset($row);
}
(código simplificado)
¿Por qué llenar la memoria, y cómo puedo evitarlo?
Nota: esta es una secuencia de comandos por lotes. Es normal que tenga que manejar datos como ese (pasar por 1 millón de líneas).
Actualización: La falta de memoria ocurre alrededor de la línea 400 000, por lo que tiene que haber algo en el ciclo? Me gustaría evitar tener que implementar la búsqueda si es posible.
No se ve como si se queda sin memoria de ese fragmento de código. ¿Hay alguna otra variable que está creciendo cada iteración? –
¿la consulta de mysql no devolverá realmente la tabla completa -> lo que significa que el resultado se contará en la memoria utilizada? – KillerX
Puede ser una sugerencia tonta, pero es lo único que se me ocurre: ¿quizás podrías intentar vaciar tu buffer de salida? – Martijn