Dlaczego zapytania do historii Home Assistant mogą zwalniać w miarę przyrostu danych rejestratora?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Home Assistant nie ma jednego uniwersalnego silnika „wyszukiwania”, którego działanie zwalnia z każdym dodanym elementem. Wyraźniejszy problem ze skalowaniem dotyczy historycznych zapytań: panel Historii, widoki podobne do Dziennika, statystyki i inne funkcje oparte na bazie danych muszą pobierać i porządkować zachowane dane Rejestratora.

Wraz ze wzrostem tego zbioru koszt zapytania zależy od liczby pasujących wierszy, indeksów, które mogą zawęzić wyniki, konieczności dołączania atrybutów, ilości danych znajdujących się już w pamięci oraz szybkości, z jaką pamięć masowa dostarcza brakujące strony. Rozmiar bazy danych ma znaczenie, ale kształt zapytania jest równie ważny.

Historia odczytuje dane z Rejestratora, a nie tylko z aktywnego mechanizmu stanów

Bieżące wartości urządzeń znajdują się w działającym modelu stanów Home Assistant, natomiast integracja Historii odczytuje zapisane obserwacje z Rejestratora. Karta na pulpicie pokazująca aktualną temperaturę i pięciodniowy wykres Historii korzystają zatem z różnych ścieżek danych.

Dokumentacja Home Assistant informuje, że Historia zależy od Rejestratora i zwykle odczytuje surowe dane Rejestratora z określonego okna przechowywania. Gdy wybrany zakres wykracza poza to okno w przypadku kwalifikujących się czujników, może zamiast tego korzystać z godzinowych statystyk długoterminowych.

Dlatego duża historyczna baza danych może sprawić, że Historia działa wolno, podczas gdy lokalna automatyzacja oświetlenia nadal reaguje natychmiast.

Więcej przechowywanych stanów oznacza więcej wierszy, metadanych i pracy indeksów

Każda zarejestrowana aktualizacja dodaje informacje do bazy danych. Home Assistant ogranicza duplikowanie danych, oddzielając identyfikatory encji i współdzielone atrybuty do powiązanych tabel, ale aktywna instalacja nadal może zgromadzić dużą liczbę wierszy stanów.

Aktualny model danych Home Assistant pokazuje, że zarejestrowane stany odwołują się do metadanych encji i współdzielonych wierszy atrybutów oraz zawierają indeksowane znaczniki czasu i relacje używane przez zapytania historyczne. Encje często zmieniające stan zwiększają więc nie tylko liczbę wartości czytelnych dla człowieka.

Okres przechowywania i częstotliwość aktualizacji wzajemnie się potęgują. Czujnik zmieniający się co sekundę tworzy zupełnie inny zbiór roboczy niż czujnik zmieniający się dwa razy dziennie, nawet jeśli oba są „jedną encją”.

Indeksy ograniczają pracę wyszukiwania, ale nie sprawiają, że rozmiar wyników jest bezkosztowy

SQLite może używać indeksów, aby unikać skanowania każdego wiersza przy typowych warunkach zapytań i sortowaniu. Jest to niezbędne dla Historii, ale indeks nie eliminuje kosztu zwracania dużego zakresu wyników ani łączenia powiązanych danych.

Dokumentacja planera zapytań SQLite wyjaśnia, że indeksy przyspieszają wyszukiwanie i sortowanie, podczas gdy duże zbiory wyników, wyszukiwanie wierszy i sortowanie nadal wymagają pracy proporcjonalnej do wybranych danych i planu. Planer wybiera spośród dostępnych ścieżek na podstawie szacowanego kosztu.

Oznacza to, że stwierdzenia „baza danych ma indeks” i „to zapytanie będzie zawsze działać w stałym czasie” nie są równoważne. Szersze zakresy czasowe i bardziej zaszumione encje nadal mogą sprawić, że istotnych będzie więcej stron i wierszy.

-15% OFF

Retencja Rejestratora kontroluje wydajność i pojemność

Home Assistant automatycznie usuwa stare dane Rejestratora, aby szczegółowy stan nie rósł bez końca. Wydłużenie okresu przechowywania zapewnia więcej historii w pełnej rozdzielczości, ale zwiększa również aktywny historyczny zbiór roboczy, rozmiar kopii zapasowych i nakład pracy związany z utrzymaniem bazy.

Dokumentacja Rejestratora wyraźnie ostrzega, że dopuszczenie do zbyt dużego wzrostu bazy danych zużywa miejsce na dysku i może spowolnić Home Assistant. Domyślne usuwanie starych danych i ponowne pakowanie służą częściowo ograniczeniu wzrostu bazy danych.

Właściwy okres przechowywania jest zatem wymaganiem użytkowym. Przechowuj dane w wysokiej rozdzielczości wystarczająco długo, aby odpowiadały na rzeczywiste pytania dotyczące domu, a nie tylko dlatego, że na dysku jest wolne miejsce.

Pamięć masowa i pamięć podręczna decydują o odczuwalnym koszcie tego samego zapytania

Powtórne żądanie Historii może być szybsze, ponieważ strony bazy danych i systemu plików znajdują się już w pamięci. To samo zapytanie po ponownym uruchomieniu lub przy presji na pamięć może wymagać większej liczby odczytów fizycznych. Inna usługa intensywnie zapisująca dane na tym samym dysku SSD może również zwiększać opóźnienia bez zmiany żądania SQL.

Analiza ZimaSpace dotycząca wzrostu metadanych i historii Home Assistant wyjaśnia przyczyny po stronie zapisu. Wydajność zapytań jest konsekwencją po stronie odczytu: większa liczba przechowywanych stanów ma największe znaczenie, gdy wybrany zakres lub zbiór roboczy rzeczywiście ich dotyka.

Przed przeniesieniem baz danych lub zakupem szybszego sprzętu mierz czas zapytań wraz z opóźnieniami pamięci masowej i presją na pamięć.

Ograniczaj koszt zapytań, zmniejszając ilość niepotrzebnych danych, a nie użytecznej historii

  • Wyklucz encje, których zmiany historyczne nie mają wartości decyzyjnej.
  • Ogranicz częstotliwość aktualizacji u źródła, gdy częste zmiany nie są przydatne.
  • Dopasuj okres przechowywania surowych danych do zakresu czasu, który użytkownicy rzeczywiście przeglądają.
  • Korzystaj ze statystyk długoterminowych dla odległych zakresów, gdy wystarczają agregaty godzinowe.
  • Przechowuj Rejestratora na niezawodnej pamięci masowej o niskich opóźnieniach i z zapasem wolnego miejsca.
  • Porównuj ten sam zakres Historii przed każdą zmianą i po niej.

Użytecznym wskaźnikiem nie jest sam rozmiar bazy danych. Liczy się to, jak zmienia się opóźnienie zapytań wraz z liczbą zachowanych wierszy, żądanym zakresem czasu, stanem pamięci podręcznej i warunkami pracy pamięci masowej.

FAQ

Czy większa baza danych Rejestratora automatycznie spowalnia lokalne automatyzacje?

Nie. Sterowanie urządzeniami na żywo i zapytania historyczne korzystają z oddzielnych ścieżek. Mogą pośrednio wpływać na siebie, gdy praca Rejestratora powoduje współdzielenie zasobów procesora, pamięci lub pamięci masowej, ale wolno działający wykres Historii nie dowodzi, że silnik automatyzacji działa wolno.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.