Я пытаюсь выполнить итерацию по двум таблицам и вытащить записи. В таблицах есть сотни тысяч строк, поэтому я знаю, что вытаскивать их все сразу не сработает, поэтому цикл и вытягивание их в партиях кажется лучшим подходом, но он не освобождает память, поэтому после нескольких попыток заканчивается память и сбои.MySQL заканчивается из памяти после нескольких запросов
Мой выход
400000 Pulled, currently on 0 || Out of 1623230 400000 Pulled, currently on 400000 || Out of 1623230 Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 39 bytes) in C:\xampp\htdocs\misc\manage tickets\test2.php on line 38
Игнорировать номер строки, у меня есть гигантский блок закомментированного кода в верхней части файла.
Код:
$iterate = 400000;
$query = "SELECT id FROM $old_db.ticketaudit_archive";
$get = $g_mysqli->query($query);
$count = $get->num_rows;
$i = 0;
while($i <= $count){
$query = "SELECT * FROM $old_db.ticketaudit_archive LIMIT $i, $iterate";
$get = $g_mysqli->query($query);
echo $get->num_rows.' Pulled, currently on '.$i.' || Out of '.$count.'<br>';
while($z = $get->fetch_assoc()){
$old_ticket_id = $z[old_ticket_id];
$ticket_id = $z[ticket_id];
unset($z[old_ticket_id], $z[ticket_id], $z[id]);
if($old_ticket_id != ''){
$ticketaudit[old_ticket_id][$old_ticket_id][] = $z;
$xx += 1;
}
elseif($ticket_id != ''){
$ticketaudit[ticket_id][$ticket_id][] = $z;
$xx += 1;
}
}
$i += $iterate;
$get->free();
$get->free_result();
$get->close();
}
Я был в этом весь день, и не может найти способ, чтобы получить MySQL уронить чертову кэш-памяти для предыдущих запросов.
Это не MySQL работает из памяти, это PHP. Это важное различие. –
Вы извлекаете данные из 400 000 строк, если у вас много данных, тогда вы, вероятно, столкнетесь с проблемами памяти. – Matt
$ i и количество строк могут не увеличиваться отлично, если вы удалили строки, ваши номера не совпадут. Вероятно, вы должны использовать «foreach», а не инкрементную схему. –