основной цикл системы
Модератор: immortal
-
- Сообщения: 230
- Зарегистрирован: Чт фев 12, 2015 2:34 pm
- Благодарил (а): 36 раз
- Поблагодарили: 6 раз
Re: основной цикл системы
что с этими таблицами делать? удалить и заново создать?
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
php 7, AMS,broadlink rm2,rm3 mini.
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: основной цикл системы
Это не ошибки, просто другой тип таблиц. mssendstack это я не знаю что, не из ядра системы точно, может какой из модулей. Значит дело не в испорченных таблицах, а в чём-то другом. Возможно, просто данных слишком много и памяти не хватает. Посмотрите таблицы самого большого размера.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- m-malva
- Сообщения: 291
- Зарегистрирован: Чт фев 26, 2015 1:38 am
- Откуда: Санкт-Петербург
- Благодарил (а): 16 раз
- Поблагодарили: 66 раз
- Контактная информация:
Re: основной цикл системы
После последнего обновления падает
main цикл остановлен
Приходится чистить
phistory_queue
phistory
раз в два-три дня
в них набирается по 30 мб
Обновления
Вы используете последнюю версию!
main цикл остановлен
Приходится чистить
phistory_queue
phistory
раз в два-три дня
в них набирается по 30 мб
Обновления
Вы используете последнюю версию!
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Re: основной цикл системы
У меня также система падала при быстром заполнении таблицы phistory: http://majordomo.smartliving.ru/forum/v ... 55&start=0
Решил проблему увеличив время задержки между опросом датчиков (а затем и вовсе с малины на ноут переехал
)
Решил проблему увеличив время задержки между опросом датчиков (а затем и вовсе с малины на ноут переехал

Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
- m-malva
- Сообщения: 291
- Зарегистрирован: Чт фев 26, 2015 1:38 am
- Откуда: Санкт-Петербург
- Благодарил (а): 16 раз
- Поблагодарили: 66 раз
- Контактная информация:
Re: основной цикл системы
Огромное спасибо, что отозвались.Ko/|xo3HUk писал(а):У меня также система падала при быстром заполнении таблицы phistory: http://majordomo.smartliving.ru/forum/v ... 55&start=0
Решил проблему увеличив время задержки между опросом датчиков (а затем и вовсе с малины на ноут переехал)
Но очень хочу понять что поменялось! До обновления все работало стабильно и phistory не переполнялась. А как обновился начали падать main и ping.
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: основной цикл системы
Последние пару дней постоянно останавливался main цикл.
Заметил, что в таблице "phistory_queue" много записей (около 1500), хотя по логике кода скрипта cycle_main.php,
они должны каждую минуту переносится в таблицу "phistory" с учетом отбрасывания одинаковых значений (я правда у себя это отключил).
Судя по всему, не успевали переносится все значения, накопившиеся в буфере "phistory_queue" и возникал "затор".
Изменил немного запрос в строке 105 (cycle_main.php#L105):
было:
стало:
вроде стало получше, за несколько часов кол-во записей упало уже до 300 и цикл main больше пока не останавливался.
06.04.2016 UPDATE
За ночь вроде совсем нормализовалось - в таблице "phistory_queue" в среднем до 10 записей.
Заметил, что в таблице "phistory_queue" много записей (около 1500), хотя по логике кода скрипта cycle_main.php,
они должны каждую минуту переносится в таблицу "phistory" с учетом отбрасывания одинаковых значений (я правда у себя это отключил).
Судя по всему, не успевали переносится все значения, накопившиеся в буфере "phistory_queue" и возникал "затор".
Изменил немного запрос в строке 105 (cycle_main.php#L105):
было:
Код: Выделить всё
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 5000");
Код: Выделить всё
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 100");
06.04.2016 UPDATE
За ночь вроде совсем нормализовалось - в таблице "phistory_queue" в среднем до 10 записей.
- За это сообщение автора cabat поблагодарил:
- Ko/|xo3HUk (Вт апр 05, 2016 9:35 pm)
- Рейтинг: 1.16%
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: основной цикл системы
07.04.2016 UPDATE
Что то не так в датском королевстве..
Днем вроде все было нормально, но когда вечером я проверил - в таблице "phistory_queue" было около 15000 записей!!!
Видимо какая то проблема с переносом записей из "phistory_queue" в "phistory"..
У меня конечно больше 900000 записей в таблице "phistory", но это же не повод..
Наверное попробую вынести этот процесс в отдельный цикл для профайлинга..
Что то не так в датском королевстве..
Днем вроде все было нормально, но когда вечером я проверил - в таблице "phistory_queue" было около 15000 записей!!!
Видимо какая то проблема с переносом записей из "phistory_queue" в "phistory"..
У меня конечно больше 900000 записей в таблице "phistory", но это же не повод..
Наверное попробую вынести этот процесс в отдельный цикл для профайлинга..
- m-malva
- Сообщения: 291
- Зарегистрирован: Чт фев 26, 2015 1:38 am
- Откуда: Санкт-Петербург
- Благодарил (а): 16 раз
- Поблагодарили: 66 раз
- Контактная информация:
Re: основной цикл системы
phistory у меня переполнялась потому, что стояло время хранения истории для всего объекта ThisComputer (7 дней, по-умолчанию там ноль) и каждое свойство при этом хранило историю, включая обновления циклов.m-malva писал(а): phistory не переполнялась. А как обновился начали падать main
поставил видимо в самом начале, когда изучал систему.
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: основной цикл системы
Кажется нашел причину тормозов (по крайней мере конкретно в моей системе) - это удаление старых значений из таблицы "phistory" при переносе строк из таблицы "phistory_queue".
Строка 116 цикла main выполняется столько раз, сколько строк получено из таблицы "phistory_queue":
Когда я на время закомментировал эту строку - кол-во записей в таблице "phistory_queue" стало стремительно уменьшаться.
Немного переделал этот кусок цикла:
было:
стало (перед циклом выборки строк из таблицы "phistory_queue" производится урезание записей из таблицы "phistory" - наверное это решение не совсем соответствует логике, которую закладывал Сергей, но для моей конфигурации это подходит):
Строка 116 цикла main выполняется столько раз, сколько строк получено из таблицы "phistory_queue":
Код: Выделить всё
SQLExec("DELETE FROM phistory WHERE VALUE_ID='".$q_rec['VALUE_ID']."' AND TO_DAYS(NOW())-TO_DAYS(ADDED)>".(int)$q_rec['KEEP_HISTORY']);
Немного переделал этот кусок цикла:
было:
Код: Выделить всё
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 100");
if ($queue[0]['ID']) {
$total=count($queue);
for($i=0;$i<$total;$i++) {
$q_rec=$queue[$i];
$value=$q_rec['VALUE'];
$old_value=$q_rec['OLD_VALUE'];
SQLExec("DELETE FROM phistory_queue WHERE ID='".$q_rec['ID']."'");
if ($value!=$old_value) {
SQLExec("DELETE FROM phistory WHERE VALUE_ID='".$q_rec['VALUE_ID']."' AND TO_DAYS(NOW())-TO_DAYS(ADDED)>".(int)$q_rec['KEEP_HISTORY']);
$h=array();
$h['VALUE_ID']=$q_rec['VALUE_ID'];
$h['ADDED']=$q_rec['ADDED'];
$h['VALUE']=$value;
$h['ID']=SQLInsert('phistory', $h);
} elseif ($value==$old_value) {
$tmp_history=SQLSelect("SELECT * FROM phistory WHERE VALUE_ID='".$q_rec['VALUE_ID']."' ORDER BY ID DESC LIMIT 2");
$prev_value=$tmp_history[0]['VALUE'];
$prev_prev_value=$tmp_history[1]['VALUE'];
if ($prev_value==$prev_prev_value) {
$tmp_history[0]['ADDED']=$q_rec['ADDED'];
SQLUpdate('phistory', $tmp_history[0]);
} else {
$h=array();
$h['VALUE_ID']=$q_rec['VALUE_ID'];
$h['ADDED']=$q_rec['ADDED'];
$h['VALUE']=$value;
$h['ID']=SQLInsert('phistory', $h);
}
}
Код: Выделить всё
$keep=SQLSelect("SELECT distinct value_id,keep_history FROM phistory_queue");
if ($keep[0]['value_id']) {
$total=count($keep);
for($i=0;$i<$total;$i++) {
$keep_rec=$keep[$i];
SQLExec("DELETE FROM phistory WHERE VALUE_ID='".$keep_rec['VALUE_ID']."' AND TO_DAYS(NOW())-TO_DAYS(ADDED)>".(int)$q_rec['KEEP_HISTORY']);
}
}
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 100");
if ($queue[0]['ID']) {
$total=count($queue);
for($i=0;$i<$total;$i++) {
$q_rec=$queue[$i];
$value=$q_rec['VALUE'];
$old_value=$q_rec['OLD_VALUE'];
SQLExec("DELETE FROM phistory_queue WHERE ID='".$q_rec['ID']."'");
if ($value!=$old_value) {
//SQLExec("DELETE FROM phistory WHERE VALUE_ID='".$q_rec['VALUE_ID']."' AND TO_DAYS(NOW())-TO_DAYS(ADDED)>".(int)$q_rec['KEEP_HISTORY']);
$h=array();
$h['VALUE_ID']=$q_rec['VALUE_ID'];
$h['ADDED']=$q_rec['ADDED'];
$h['VALUE']=$value;
$h['ID']=SQLInsert('phistory', $h);
} elseif ($value==$old_value) {
$tmp_history=SQLSelect("SELECT * FROM phistory WHERE VALUE_ID='".$q_rec['VALUE_ID']."' ORDER BY ID DESC LIMIT 2");
$prev_value=$tmp_history[0]['VALUE'];
$prev_prev_value=$tmp_history[1]['VALUE'];
if ($prev_value==$prev_prev_value) {
$tmp_history[0]['ADDED']=$q_rec['ADDED'];
SQLUpdate('phistory', $tmp_history[0]);
} else {
$h=array();
$h['VALUE_ID']=$q_rec['VALUE_ID'];
$h['ADDED']=$q_rec['ADDED'];
$h['VALUE']=$value;
$h['ID']=SQLInsert('phistory', $h);
}
}
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: основной цикл системы
По итогам регулярной проверки в течении дня кол-во записей в таблице "phistory_queue" не поднималось больше 2-3 !!
Посмотрим, что будет через день-два..
Посмотрим, что будет через день-два..