Dejando a un lado a Kohana, porque nunca lo he usado, lo que estás haciendo actualmente es básicamente esto:
$result = mysql_query(...);
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
Es decir. está obteniendo todos los datos de MySQL con mysql_fetch_assoc
y almacenarlos todos en la memoria de PHP introduciéndolos en $data
. Eso significa que PHP necesita tener suficiente memoria para almacenar todos los datos a la vez, lo cual no tiene.
Lo que quiere hacer es obtener una fila de resultados de MySQL, hacer algo con ella y luego pasar a la siguiente fila sin almacenar todo en la memoria a la vez:
$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
echo $row['foo'];
}
Y no, por favor no use la API mysql_ en desuso, es solo el ejemplo del denominador común más grande aquí. Además, debe haber una mejor manera de hacer lo que quiera que intentar obtener y generar 190 000 filas a la vez.