@Korneliy

В чем ошибка применения функции sleep()?

Периодически мне нужно совершать запись из одной таблицы MYSQL в другую.

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

Всё бы хорошо, но ни set_time_limit(0) не помогает, ни включение в цикл sleep() - Ошибка 504 через некоторое время выполнения.

Помогает только разбитие работы на несколько частей с помощью BETWEEN 450000 AND 600000. Вот так сижу, дожидаюсь завершения работы первой части, меняю ручками значения в BETWEEN и делаю следующую. Грустно это. :(

Код такой:
//тут запрос к базе данных
$count=0;
foreach($list as $row) {
$count++;
//тут логика перестроения полей таблицы и запись очередной строки в новую таблицу
if(($count%30000)==0)
    {
        sleep(30);
    }
}


То есть, убирал из запроса BETWEEN и вставлял паузу, но смысла не было. Сервер не "отдыхал". Причем, как понятно из приведенного диапазона BETWEEN, без проблем выдерживаются 150 тысяч итераций. А sleep я ставлю только на каждый 30 тысяч. Менял значения, в том числе и количество секунд - всё без толку.
  • Вопрос задан
  • 352 просмотра
Решения вопроса 2
DevMan
@DevMan
1. такие задачи нужно выполнять через консоль, а не вэб.
2. sleep тут вообще ни к месту.
Ответ написан
@Vitsliputsli
Вы получаете ошибку, потому как nginx не дождался ответа от php, который ожидает ответ от mysql, который лопатит ваш не хилый запрос на получение.
Разбивайте на части, управляйте этим в коде. Как уже указано, запускайте php не через nginx, а в cli. Записывайте не построчно, а тоже блоками. 150 000 это много, попробуйте блоки по 1000, а может и меньше.
Откуда взялся sleep? Если это троттлинг, то 30 секунд как то очень много.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы