Как я могу оптимизировать сценарий PHP, который получает 1M+ строки MySQL для отчетности без утомительной памяти? [дублиMySql

Форум по Mysql
Ответить
Anonymous
 Как я могу оптимизировать сценарий PHP, который получает 1M+ строки MySQL для отчетности без утомительной памяти? [дубли

Сообщение Anonymous »

Я работаю над веб -приложением PHP, которое генерирует отчеты из таблицы MySQL с более чем 1 миллион строк. и уменьшить использование памяти.


Что я пробовал:
  • pagination: я пытался использовать предел и смещение в чертах 100 000. Индексируется на user_id и create_at .
  • redis: i кэш. /> < /li>
    < /ul>
    Что я ожидал: < /h3>

    Значительное снижение использования памяти и времени генерации. < /p>
    < /li>
    Избегайте времени и истощения памяти. На самом деле произошло: < /h3>

    Все еще сталкивается с высоким использованием памяти (Allowed memory size exhausted) При генерации больших отчетов.
  • Время выполнения превышает 30 секунд в некоторых случаях
set_time_limit(0);
ini_set('memory_limit', '512M');

$offset = 0;
$limit = 10000;
$fp = fopen('php://output', 'w');

while (true) {
$query = "SELECT * FROM reports_table ORDER BY created_at ASC LIMIT $limit OFFSET $offset";
$results = mysqli_query($conn, $query);

if (mysqli_num_rows($results) == 0) break;

while ($row = mysqli_fetch_assoc($results)) {
fputcsv($fp, $row);
}

$offset += $limit;
ob_flush();
flush();
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-withou
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»