Оптимизация БД в Мажордомо

Average Rating
0 out of 5 stars. 0 votes.

Если вы устанавливали Мажордомо используя Windows инсталятор, то скорей всего у вас не был включён в поставку сценарий оптимизации базы данных. Особенно полезно его применение я так подозреваю для тех кто пользуется модулем GPS. Но, если вы откроете метод “onNewMinute”, то сможете обнаружить что он пытается вызвать его каждую ночь в 3 часа.

if (timeIs("03:00")) {
runScript("systemMaintenance");
}

Но если в разделе “Сценарии” у вас нет “systemMaintenance”, то скорей всего он не запускается. Итак, исправляет эту оплошность. Создаём новый сценарий с одноимённым именем и вставляем в него следующий код:

require(ROOT.'scripts/startup_maintenance.php');
// optimize gps
$records=SQLSelect("SELECT ID, DEVICEID, LOCATION_ID FROM gpslog ORDER BY DEVICEID, ADDED DESC");
$total=count($records);
$to_delete=array();
for($i=1;$i<$total-1;$i++) {
if (!$records[$i]['LOCATION_ID']) continue;
if "($records[$i]['LOCATION_ID']=" =$records[$i+1]['LOCATION_ID'] && "$records[$i]['LOCATION_ID']=" =$records[$i-1]['LOCATION_ID']) {
//$to_delete[]=$records[$i]['ID'];
SQLExec("DELETE FROM gpslog WHERE "ID" =".$records[$i]['ID']);
}
}
// optimize phistory
getURL('http://localhost/scripts/optimize_history.php',0);
say("Оптимизация бд выполнена");

Average Rating
0 out of 5 stars. 0 votes.

4 thoughts on “Оптимизация БД в Мажордомо”

  1. проверьте строки
    if “($records[$i][‘LOCATION_ID’]=” =$records[$i+1][‘LOCATION_ID’] && “$records[$i][‘LOCATION_ID’]=” =$records[$i-1][‘LOCATION_ID’])
    и
    SQLExec(“DELETE FROM gpslog WHERE “ID” =”.$records[$i][‘ID’]);

  2. Вариант, который ещё чистит записи без существующего девайса
    set_time_limit(6000);
    $records=SQLSelect(“SELECT gpslog.ID, gpslog.DEVICEID, gpslog.LOCATION_ID, gpsdevices.ID as GPS_DEVICE_ID FROM gpslog LEFT JOIN gpsdevices ON gpslog.DEVICE_ID=gpsdevices.ID ORDER BY gpslog.DEVICEID, gpslog.ADDED DESC”);
    $total=count($records);
    $to_delete=array();
    for($i=1;$i<$total-1;$i++) {
    if (!$records[$i]['GPS_DEVICE_ID']) {
    SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
    continue;
    }
    if (!$records[$i]['LOCATION_ID']) continue;
    if ($records[$i]['LOCATION_ID']==$records[$i+1]['LOCATION_ID'] && $records[$i]['LOCATION_ID']==$records[$i-1]['LOCATION_ID']
    && $records[$i]['GPS_DEVICE_ID']==$records[$i+1]['GPS_DEVICE_ID'] && $records[$i]['GPS_DEVICE_ID']==$records[$i-1]['GPS_DEVICE_ID']) {
    SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
    }

    }

    SQLExec("OPTIMIZE TABLE `gpslog`");

Leave a Reply to Anonymous Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>