Задать вопрос
@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 тысяч. Менял значения, в том числе и количество секунд - всё без толку.
  • Вопрос задан
  • 403 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 2
DevMan
@DevMan
1. такие задачи нужно выполнять через консоль, а не вэб.
2. sleep тут вообще ни к месту.
Ответ написан
@Vitsliputsli
Вы получаете ошибку, потому как nginx не дождался ответа от php, который ожидает ответ от mysql, который лопатит ваш не хилый запрос на получение.
Разбивайте на части, управляйте этим в коде. Как уже указано, запускайте php не через nginx, а в cli. Записывайте не построчно, а тоже блоками. 150 000 это много, попробуйте блоки по 1000, а может и меньше.
Откуда взялся sleep? Если это троттлинг, то 30 секунд как то очень много.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы