Страница 1 из 1

Долгий запрос MySQL

Добавлено: Чт окт 19, 2017 12:49 am
PAV
Вот такой запрос занимает 78 секунд, учитывая, что выполняется каждую минуту - ошибки.
Что такое может быть - куда копать?

Код: Выделить всё

$objects=SQLSelect("SELECT TITLE FROM objects");
 $total=count($objects);
 for($i=0;$i<$total;$i++) {
 
    if (gg($objects[$i]['TITLE'].'.IP')) {
       if ((gg($objects[$i]['TITLE'].'.IP'))>0){
                 
    if (ping(gg($objects[$i]['TITLE'].'.IP'))) {
         callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
        
    } else {// если 0
     
        if (ping(gg($objects[$i]['TITLE'].'.IP'))) {
        callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
        }else{
            if (ping(gg($objects[$i]['TITLE'].'.IP'))) {
            callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
            }else{
            callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>0));
            }
    
    
    
        }
    } 
   }
 
  } 
}
До переустановки системы все работало нормально.

Re: Долгий запрос MySQL

Добавлено: Чт окт 19, 2017 1:35 am
xor
Ну, дело, всё-таки, не в mySQL-запросе, а в куче пингов в цикле.

Код: Выделить всё

$objects=SQLSelect("SELECT TITLE FROM objects");
 $total=count($objects);
 for($i=0;$i<$total;$i++) {  //Вы перебираете все объекты в системе
 
    if (gg($objects[$i]['TITLE'].'.IP')) { //смотрите на наличие свойства айпи
       if ((gg($objects[$i]['TITLE'].'.IP'))>0){ //есть свойство
                 
    if (ping(gg($objects[$i]['TITLE'].'.IP'))) { //пингуете этот объект
         callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
        
    } else {// если 0 //пинг не прошёл(
     
        if (ping(gg($objects[$i]['TITLE'].'.IP'))) { //снова пингуете этот же объект
        callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
        }else{ //пинг не прошёл(
            if (ping(gg($objects[$i]['TITLE'].'.IP'))) { //снова пингуете этот же объект
            callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>1));
            }else{
            callMethod($objects[$i]['TITLE'].'.statusChanged',array("value"=>0));//тут Вы сдаетесь и переходите к следующему объекту
            }
    
    
    
        }
    } 
   }
 
  } 
}

те, при плохом раскладе Вы каждый объект с айпи три раза пингуете.
Такая логика?
Сколько у Вас таких объектов? Сколько времени тратится на один пинг?
Это надо делать с интервалом в минуту?
Может, стоит это запускать через таймауты, чтобы они отдельными потоками выполнялись?

Re: Долгий запрос MySQL

Добавлено: Чт окт 19, 2017 6:09 am
nick7zmail
А вы вкурсе, что вы вообще все объекты вытягиваете из системы? Прямо вообще все? Не проще хотя бы по классу ещё отобрать? У вас наверное те которые надо пинговать хотя бы в 1 или в нескольких классах собраны? Или я ошибаюсь?

Re: Долгий запрос MySQL

Добавлено: Чт окт 19, 2017 1:08 pm
PAV
В курсе, но там не так уж и много объектов с IP, штук 20. А можете подсказать, на примере кода выше, как ограничить класс?

Re: Долгий запрос MySQL

Добавлено: Чт окт 19, 2017 6:59 pm
xor
Посмотрите функцию getObjectsByProperty. Она отберёт Вам только объекты с заданным свойством и условием. Но, боюсь, это не спасёт. Отбор хоть селектом, хоть функцией занимает минимум времени по сравнению с тем, что творится в цикле

Re: Долгий запрос MySQL

Добавлено: Ср окт 25, 2017 11:46 am
PAV
А процесс пинга можно как-то ускорить?

Re: Долгий запрос MySQL

Добавлено: Ср окт 25, 2017 1:38 pm
slex_s
$host="192.168.0.1";
exec("ping -c 2 -i 0.2 -w 1 " . $host, $output, $result);

if ($result == 0){

echo "Ping successful!";
}
else{

echo "Ping unsuccessful!";
}

Re: Долгий запрос MySQL

Добавлено: Ср окт 25, 2017 4:49 pm
PAV
:!: :geek: 9 секунд на все!!!! Спасибо ;)