Wb-mqtt-db 50-90% загрузка цп

День добрый, помогите разобраться что не так. mqtt-db постоянно ест много ресурсов цп, wb7.3 2/64, перезапуск не помогает.

Файл дб около 80мб

Конфиг такой

{
  "database": "/var/lib/wirenboard/db/data.db",
  "debug": false,
  "groups": [
    {
      "channels": [
        "PIDTest/enabled",
        "PIDTest/log1",
        "Actuator test/+",
        "wb-w1/+"
      ],
      "max_burst": 10,
      "min_interval": 20,
      "min_unchanged_interval": 120,
      "name": "ТестPID",
      "values": 20000,
      "values_total": 40000
    },
    {
      "channels": [
        "+/+"
      ],
      "max_burst": 30,
      "min_interval": 120,
      "min_unchanged_interval": 1200,
      "name": "all",
      "values": 100000,
      "values_total": 1000000
    }
  ]
}

Размеры таблиц по
echo “select count(CHANNEL), (select device from channels where channels.int_id=data.channel) as DEVICE, (select control from channels where channels.int_id=data.channel) as CHANNEL from data group by CHANNEL;” | sqlite3 /mnt/data/var/lib/wirenboard/db/data.db

table_sizes.txt (36,9 КБ)

В логах mqtt-db без отладки вообще никакого криминала, при отладке бросается в глаза
частые nothing to save относитель w1 датчиков которых нет в системе.

14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-w1/28-7346000006e1: nothing to save
14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-w1/28-4c0a000006e1: nothing to save
14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-w1/28-4c0a000006e1: nothing to save
14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-gpio/EXT2_IN1: nothing to save
14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-w1/28-c50a000006e1: nothing to save
14-02-2024 09:52:59.790	DEBUG: [dblogger] "all" wb-mr6c_86/Input 5 counter: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-714000000001: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-b2a000000001: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-cda000000001: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-af66000006e1: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-954000000001: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-f02a000006e1: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-f02a000006e1: nothing to save
14-02-2024 09:52:59.767	DEBUG: [dblogger] "all" wb-w1/28-f02a000006e1: nothing to save

Увидив это сделал
mqtt-delete-retained /devices/wb-w1/#

Удилились даже действующие, но ситуацию не изменило. Ни в закладке Каналы MQTT ни через mqtt_sub этих датчиков не вижу.

Куда копать?

Выгрузил лог за пару минут работы после

mqtt-delete-retained /devices/wb-w1/#
и перезапуска wb-mqtt-db

journalctl --since ‘2024-02-14 10:08:00’ --until ‘2024-02-14 10:11:00’ -u wb-mqtt-db.service > wb-mqtt-db.log

wb-mqtt-db.log (4,8 МБ)

Еще раз проверяю mqtt через mqtt explorer и в упор не вижу всего этого зоопарка retained messages, только 5 действующих датчиков.

Забрал базу с контроллера и глянул sqlite browser. Там в таблице channels околок 12000 записей wb-w1. Какое то время на контроллере висели кривые датчики (или с шиной было плохо, неважно) и регулярно появлялись фэйковые, потом пропадали. Видимо они тут все. Я понимаю что это немного нетиповой сценарий, но правильно ли понимаю он по всем ним пытается посмотреть нет ли новых значений и штатного механизма почистить этот список нет?

upd таблица в csv
channels.csv (552,4 КБ)

Сам спросил - сам починил. Удалил запросом все лишнее из таблицы channels.

echo "DELETE FROM channels WHERE  device  like 'wb-w1';" | sqlite3 /mnt/data/var/lib/wirenboard/db/data.db

После рестарта сервиса добавились только действующие датчики в таблицу, загрузка с 50-90 упала до 8-12%.

Но, имхо, это баг - что из списка опрашиваемых каналов не удаляются отсутствующие устройства. Там еще много хлама которого уже давно нет в системе. Понимаю что при “обычном” количестве устройств его не так много, но все же - лишние затраты ресурсов и может выстреливать при внешних (отн mqtt-db) проблемах типа моей.

Добрый день.
Я вижу в базе записи для

2112|wb-w1|28-00000e49ecc0
2952|wb-w1|28-00000e4a50c4
3800|wb-w1|28-00000e4b0013
4381|wb-w1|28-00000e4bf6d2
1648|wb-w1|28-00000e4c2180

И - да. Так и есть, к сожалению.
Сделаю по этому поводу багрепорт. Предполагаю что периодически надо удалять каналы, у которых нет значимых записей.
Отличный анализ, благодарю за подробное описание.

1 лайк