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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽