Dlaczego Home Assistant generuje różne obciążenia podczas odczytu i zapisu?

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 generuje różne obciążenia odczytu i zapisu, ponieważ zapytania ponownie wykorzystują strony z pamięci podręcznej, podczas gdy utrwalanie stanu modyfikuje dzienniki, indeksy i trwałą pamięć masową.

Otwarcie wykresu historii może przeskanować wiele zapisanych wierszy bez ich zmiany, podczas gdy jeden zaszumiony czujnik może tworzyć małe transakcje przez cały dzień. Pierwszy wzorzec sprzyja odczytom sekwencyjnym, pamięci podręcznej bazy danych i indeksom zapytań; drugi dodaje synchronizację, aktualizacje dziennika, metadane systemu plików oraz zwielokrotnienie zapisów w pamięci flash. Dlatego wykresy różnią się, nawet gdy obie operacje dotyczą tej samej bazy danych Recorder.

Zmiany stanu na żywo powodują więcej niż jeden zapis

Recorder przekształca wybrane zmiany stanów i zdarzeń w transakcje bazy danych. Wstawienie logicznego wiersza może również aktualizować indeksy oraz dziennik lub log zapisu z wyprzedzeniem, zanim system plików i pamięć podręczna urządzenia potwierdzą trwałe zakończenie operacji.

Wyjaśnienie bazy danych i statystyk rozdziela krótkoterminowe przechowywanie stanu od statystyk długoterminowych, pokazując, dlaczego struktury danych Recorder mogą dotykać kilku powiązanych struktur, a nie tylko jednego pliku dopisywanego na końcu.

Encje o wysokiej częstotliwości generują wiele małych zmian logicznych, które mogą być zatwierdzane grupami. Może to wyglądać jak okresowe serie operacji; liczba fizycznie zapisanych bajtów może przekraczać rozmiar danych, ponieważ warstwy bazy danych i pamięci masowej zachowują spójność.

Odczyty historii zależą od zakresu, selektywności i pamięci podręcznej

Wyszukiwanie bieżącego stanu jest niewielkie, ale wykres historii obejmujący wiele encji może przeskanować duży zakres czasu, zdekodować atrybuty, zagregować wyniki i przesłać je do klienta. Przydatne indeksy i rozgrzane strony bazy danych mogą sprawić, że wiele z tych operacji nie będzie wymagać dostępu do fizycznej pamięci masowej.

Przypadek długotrwałego problemu z wydajnością wykazał wyjątkowo wolny dostęp do historii mimo zwykłego korzystania z funkcji na żywo, pokazując, że obciążenie zapytaniami historii może ujawnić problem ze ścieżką zapytań, którego nie powoduje sterowanie bieżącym stanem.

Powtarzane odczyty często stają się szybsze, gdy odpowiednie strony pozostają w pamięci. Ta korzyść znika po ponownym uruchomieniu, przy presji na pamięć lub przy innym zakresie dat, dlatego pojedyncze zapytanie wykonane na rozgrzanym systemie nie jest wiarygodną miarą przepustowości pamięci masowej.

Koszt zapisów rośnie wraz z rejestrowaniem i usługami współdzielącymi zasoby

Home Assistant Core nie jest jedynym procesem zapisującym dane na typowym serwerze domowym. Dzienniki debugowania, bazy danych dodatków, kopie zapasowe, migawki z kamer i dzienniki kontenerów mogą współdzielić to samo urządzenie oraz powodować kolejkowanie dokładnie wtedy, gdy Recorder próbuje zatwierdzić transakcję.

Użytkownicy ograniczający zużycie pamięci flash zaobserwowali, że dzienniki i powiązane komponenty zwiększają liczbę cykli zapisu. Dlatego aktywność zapisu na całym woluminie powinna obejmować cały wolumin, a nie tylko główny proces bazy danych.

Analiza na poziomie procesów oddziela zachowanie aplikacji od rywalizacji o współdzieloną pamięć masową. Jeśli Recorder jest bezczynny, a zapisy wykonuje inny kontener, zmiana wykluczeń encji nie rozwiąże obserwowanego obciążenia.

-15% OFF

Konserwacja może odwrócić typowy wzorzec

Usuwanie wygasłych wierszy, odbudowywanie indeksów, wykonywanie operacji vacuum lub przepakowywanie może odczytywać i ponownie zapisywać duże części bazy danych. W tym czasie zadanie opisane jako czyszczenie może powodować zarówno większe obciążenie odczytem, jak i większe obciążenie zapisem niż zwykłe rejestrowanie stanu.

Dyskusje dotyczące konfiguracji Recorder łączą retencję i działanie czyszczenia z konserwacją bazy danych, dlatego retencja i działanie czyszczenia są kluczowe, gdy regularny skok obciążenia pojawia się codziennie o tej samej porze.

Wyjaśnienie różnicy między odczytem a zapisem przestaje obowiązywać, gdy wąskim gardłem jest obliczanie szablonów po stronie procesora, renderowanie po stronie klienta lub dostarczanie danych przez sieć. Liczniki pamięci masowej muszą rosnąć wraz z objawem; w przeciwnym razie baza danych jest jedynie sąsiadującym elementem opóźnienia.

Porównaj jedną ścieżkę odczytu i jedną ścieżkę zapisu

Wybierz stałe zapytanie historii oraz nieszkodliwą czynność zmieniającą stan. Dla każdej z nich rejestruj opóźnienie żądania, użycie procesora, czas pracy bazy danych, przepustowość dysku, liczbę operacji wejścia-wyjścia na sekundę, głębokość kolejki i opóźnienie urządzenia — najpierw od zimnego startu, a następnie podczas powtórzonego uruchomienia na rozgrzanym systemie.

Powiązany artykuł o wzroście przechowywanych danych wyjaśnia, dlaczego wzrost metadanych i historii zmienia obciążenie, opierając porównanie na przechowywanych danych zamiast na arbitralnym ruchu testowym.

Określ ograniczenie na podstawie współzmienności: wolny pierwszy odczyt i szybkie powtórzenie sugerują lokalność pamięci podręcznej; rosnący czas zapytania wraz z zakresem sugeruje koszt skanowania; opóźnienie zapisu wraz z głębokością kolejki sugeruje rywalizację o trwałą pamięć masową; brak obu wzorców sugeruje inną warstwę. Optymalizuj wyłącznie tę ścieżkę, która dwukrotnie odtwarza opóźnienie widoczne dla użytkownika.

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.