Re: основной цикл системы
Добавлено: Пт мар 25, 2016 12:37 pm
что с этими таблицами делать? удалить и заново создать?
Огромное спасибо, что отозвались.Ko/|xo3HUk писал(а):У меня также система падала при быстром заполнении таблицы phistory: http://majordomo.smartliving.ru/forum/v ... 55&start=0
Решил проблему увеличив время задержки между опросом датчиков (а затем и вовсе с малины на ноут переехал)
Код: Выделить всё
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 5000");Код: Выделить всё
$queue=SQLSelect("SELECT * FROM phistory_queue ORDER BY ID LIMIT 100"); phistory у меня переполнялась потому, что стояло время хранения истории для всего объекта ThisComputer (7 дней, по-умолчанию там ноль) и каждое свойство при этом хранило историю, включая обновления циклов.m-malva писал(а): phistory не переполнялась. А как обновился начали падать main
Код: Выделить всё
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);
}
}