Mettendo da parte Kohana, perché non l'ho mai usato, quello che stai facendo attualmente è sostanzialmente questo:
$result = mysql_query(...);
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
Cioè. stai ricevendo tutti i dati da MySQL con mysql_fetch_assoc
e salvali tutti nella memoria di PHP inserendolo in $data
. Ciò significa che PHP deve disporre di memoria sufficiente per archiviare tutti i dati contemporaneamente, cosa che non ha.
Quello che vuoi fare è recuperare una riga di risultati da MySQL, fare qualcosa con essa, quindi passare alla riga successiva senza archiviare tutto in memoria in una volta:
$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
echo $row['foo'];
}
E no, per favore non utilizzare l'API mysql_ deprecata, è solo il più grande esempio di denominatore comune qui. Inoltre, ci deve essere un modo migliore per fare tutto ciò che vuoi che provare a recuperare e generare 190.000 righe contemporaneamente.