23. Ускорение работы Home Assistant. Смена базы данных с SQLite на MariaDB.


Система управления умным домом Home Assistant хранит информацию о всех происходящих событиях в собственной базе данных. По умолчанию это база данных SQLite. Она неплохо справляется со своей работой, но в том числе имеет и ряд недостатков. Попробуем их устранить.
Предыдущая статья

Для начала сравним что для чего нужно.

Плюсы SQLite:

  • уже встроена в ХА "из коробки" и готова к работе
  • работает на любом "железе".
  • при копировании сохраняется история действий

Минусы SQLite:

  • производительность движка базы данных не самая высокая
  • нет возможностей масштабирования
  • нет возможности отделить базу данных от ядра системы (должна быть установлена на том же хосте)

Есть безболезненная возможность сделать замену базы данных, установив более шуструю и безопасную MariaDB.

Её основной минус это плохая работа на картах памяти типа SD в одноплатных компьютерах. Т.к. происходит достаточно плотный поток циклов чтения/записи данных, то карточки такой нагрузки не выдерживают и со временем выходят из строя.

Плюсы MariaDB:

  • высокая производительность движка базы
  • безопасность
  • возможность масштабирования
  • возможность отделить базу данных от ядра системы (может быть установлена на другом хосте)

Минусы MariaDB:

  • Нужно установить отдельно
  • работает только на HDD и/или SSD дисках
  • сложнее скопировать при необходимости, если надо сохранить историю действий.
Теперь можно перейти от теории к практике.

Не забываем делать бэкапы перед любыми изменениями в системе, особенно такими глобальными!

Заходим в магазин дополнений и устанавливаем MariaDB.
Настройки -> дополнения -> магазин дополнений -> MariaDB

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

Теперь можно вернуться на главную страницу дополнения и включить автозагрузку и обновления

Можно запускать дополнение, чтобы оно создало необходимые записи. Главное зайти в лог и удостовериться что всё прошло и загрузилось нормально.

Теперь нужно "сказать" самому Home Assistant'у что ему надо обращаться к новой базе данных. Для этого открываем с помощью ранее установленного текстового редактора главный файл настроек системы configuration.yaml и в самый конец файла дописываем три строки:
recorder:
  db_url: mysql://username:password@core-mariadb/homeassistant?charset=utf8mb4
  purge_keep_days: 14
Вместо username указываем придуманное и сохранённое в настройках MariaDB имя пользователя.
Вместо password пишем пароль указанный там же.
Вместо 14 указываем любое другое число дней, после которого база будет самостоятельно обнулять историю. Если нет желания её обнулять, то нужно полностью удалить эту строку или не копировать её. Если в конфигурационном файле будет что-то не так, то в правом верхнем углу будет показан красный кружок вместо зелёного. Убеждаемся что всё ок и сохраняем изменения в файле.  

Последний пункт. Заходим в панель разработчика -> YAML и выполняем проверку сделанных изменений.
Если проверка показала что всё в порядке, то делаем перезапуск.

Когда система поднимется, самый надёжный способ убедиться что переезд прошёл гладко, это зайти в меню "история" и выбрав любой элемент посмотреть на его данные. Если есть история только за последние несколько минут, значит данные пишутся в новую базу данных.

Осталось попрощаться со старой базой данных. Заходим в текстовый редактор, находим файл home-assistant_v2.db (не открывая его), нажимаем на 3 точки рядом с его именем и удаляем.

Для надёжности можно ещё раз перезагрузить систему.

Если есть желание/необходимость мониторить размер новой базы данных, то сделать это можно с помощью сенсора, который будет отображать эти данные. Сенсор создаётся с помощь интеграции SQL.
Идём в настройки -> Устройства и службы -> добавить интеграцию -> SQL. И подтверждаем следующую настройку:
В названии указываем желаемое имя для сенсора.
В адресе базы данных не забываем указать свои имя пользователя и пароль к ней.
mysql://username:password@core-mariadb/homeassistant?charset=utf8
Интересующий нас столбец называется value
Запрос:
SELECT table_schema "database", Round(Sum(data_length + index_length) / 1048576, 2) "value" FROM information_schema.tables WHERE table_schema="homeassistant" GROUP BY table_schema;
И единица измерения мегабайты.

Если всё указано верно, то будет создан новый сенсор, который можно будет использовать в интерфейсе, для визуализации

Комментарии