Возникает такая ошибка в кроне. В чем может быть причина?
2018-09-17 16:12:13 - OneTime - Task terminated
<br />
<b>Fatal error</b>: Allowed memory size of 536870912 bytes exhausted (tried to allocate 395974400 bytes) in <b>/home/intertorg/public_html/include/sql_functions.php</b> on line <b>69</b><br />
Сам скрипт
$result = data_select(711, "status=0"); // цикл по всем активным записям таблицы Наши сотрудники
while ($line = sql_fetch_assoc($result)){
/*
* Отправить текущую запись в реестр СушиМастер
* 1. Добавляем запись с нужынми полями в таблицу реестра
* 2. Обнуляем поля кроме телефона, города и группы
* 06.09.2018
*/
/*1*/
$newData['Телефон'] = $line['f15541'];
$newData['Группа'] = $line['f15571'];
$newData['Город'] = $line['f15581']['id'];
$newData['Канал отправки'] = $line['f15551'];
$newData['Статус сообщ.'] = $line['f15561'];
$newData['Дата обновления статуса'] = $line['f15611'];
$newData['Статус'] = $line['f15621'];
$newData['Время отправки'] = $line['f15881'];
if($line['id'] >= '1240379' && $line['f15621'] == 'Есть отчет' && $line['f15611'] != ''){
insert_query($newData, 'СушиМастер (реестр)');
}
/*2*/
/*
$line['Канал отправки'] = '';
$line['Статус сообщ.'] = '';
$line['Дата обновления статуса'] = '';
$line['Статус'] = '';
$line['Время отправки (по МСК)'] = '';
*/
}


CRON Ошибка
Автор TelecomMedia, 17 сент. 2018 16:29
Сообщений в теме: 3
#1
Отправлено 17 Сентябрь 2018 - 16:29
#2
Отправлено 18 Сентябрь 2018 - 13:19
А много ли записей в таблице? Задача вылетает из-за нехватки памяти. Плюс у вас ошибка - не $line['f15581']['id'], a $line['f15581'], здесь поля связи не разворачиваются.
#3
Отправлено 18 Сентябрь 2018 - 15:28
CbCoder (18 Сентябрь 2018 - 13:19) писал:
А много ли записей в таблице? Задача вылетает из-за нехватки памяти. Плюс у вас ошибка - не $line['f15581']['id'], a $line['f15581'], здесь поля связи не разворачиваются.
Да, записей больше 1.2 млн.
А как нам тогда разбиение провести правильно?
Так?
$result = data_select(711, "status=0 AND id<'1000'"); // цикл по всем активным записям таблицы Наши сотрудники
while ($line = sql_fetch_assoc($result)){
/*
#4
Отправлено 18 Сентябрь 2018 - 19:27
* делайте выборку не всех полей, а только нужных - функция data_select_field(ID_таблицы, 'id, fXXXX, fXXXX', "status=0");
* отмечайте дату обработки этой задачи cron в карточке, и ставьте условие в выборке, чтобы эта дата была ранее ХХ часов назад, и ставьте лимит в выборке. Итого - будете обрабатывать по N записей, сортируя их по дате последней обработки (пакетно)
* возможно, тут нужна оптимизация на уровне логики построения кода - действительно необходимо регулярно обрабатывать все 1.2М записей?
* отмечайте дату обработки этой задачи cron в карточке, и ставьте условие в выборке, чтобы эта дата была ранее ХХ часов назад, и ставьте лимит в выборке. Итого - будете обрабатывать по N записей, сортируя их по дате последней обработки (пакетно)
* возможно, тут нужна оптимизация на уровне логики построения кода - действительно необходимо регулярно обрабатывать все 1.2М записей?
Сообщение отредактировал AntonKravchenko: 18 Сентябрь 2018 - 19:30
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных