Porque é que as consultas ao histórico do Home Assistant podem ficar mais lentas à medida que os dados do Recorder aumentam?

Eva Wong é a Redatora Técnica e e entusiasta residente na ZimaSpace. Uma geek de longa data com paixão por homelabs e software de código aberto, ela é especialista em traduzir conceitos técnicos complexos em guias acessíveis e práticos . Eva acredita que o auto-hospedagem deve ser divertida, não intimidante. Através dos seus tutoriais, ela capacita a comunidade adesmistificar configurações de hardware , desde a construção do seu primeiro NAS até dominar os contêineres Docker., from building their first NAS to mastering Docker containers.

O Home Assistant não tem um motor de “pesquisa” universal cuja velocidade diminua com cada entidade adicionada. O problema de escalabilidade mais evidente está no trabalho histórico das consultas: o painel Histórico, as vistas semelhantes ao Registo de eventos, as estatísticas e outras funcionalidades baseadas em bases de dados têm de obter e organizar os dados retidos pelo Recorder.

À medida que esse conjunto de dados cresce, o custo de um pedido depende do número de linhas correspondentes, dos índices que as conseguem restringir, da necessidade de associar atributos, da quantidade de dados que já está na memória e da rapidez com que o armazenamento consegue disponibilizar as páginas em falta. O tamanho da base de dados é importante, mas a estrutura da consulta é igualmente relevante.

O Histórico lê do Recorder, não apenas da máquina de estados em tempo real

Os valores atuais dos dispositivos vivem no modelo de estados em tempo de execução do Home Assistant, enquanto a integração Histórico lê observações armazenadas pelo Recorder. Assim, um cartão do painel que mostra a temperatura atual e um gráfico do Histórico de cinco dias utilizam caminhos de dados diferentes.

O Home Assistant documenta que o Histórico depende do Recorder e normalmente lê dados brutos do Recorder dentro da janela de retenção configurada. Quando o intervalo selecionado ultrapassa essa janela para sensores elegíveis, pode utilizar estatísticas históricas de longo prazo por hora.

É por isso que uma base de dados histórica grande pode fazer o Histórico parecer lento, enquanto uma automação local de iluminação continua a reagir instantaneamente.

Mais estados retidos significam mais linhas, metadados e trabalho de indexação

Cada atualização registada acrescenta informação à base de dados. O Home Assistant reduz a duplicação separando os identificadores das entidades e os atributos partilhados em tabelas relacionadas, mas uma instalação ocupada pode ainda acumular um grande número de linhas de estados.

O modelo de dados atual do Home Assistant mostra que os estados registados fazem referência a metadados de entidades e a linhas de atributos partilhados e incluem marcas temporais indexadas e relações utilizadas pelas consultas históricas. Por isso, as entidades que mudam rapidamente aumentam mais do que a contagem de valores legíveis por humanos.

O período de retenção e a frequência de atualização multiplicam-se entre si. Um sensor que muda a cada segundo cria um conjunto de trabalho muito diferente do de um sensor que muda duas vezes por dia, mesmo que ambos sejam “uma entidade”.

Os índices reduzem o trabalho de pesquisa, mas não tornam gratuito o tamanho do resultado

O SQLite pode utilizar índices para evitar a leitura de todas as linhas em restrições e ordenações de consulta comuns. Isso é essencial para o Histórico, mas um índice não elimina o custo de devolver um intervalo grande de resultados ou de associar dados relacionados.

A documentação do planeador de consultas do SQLite explica que os índices aceleram a pesquisa e a ordenação, enquanto conjuntos de resultados grandes, pesquisas de linhas e ordenações continuam a exigir trabalho proporcional aos dados selecionados e ao plano. O planeador escolhe entre os caminhos disponíveis com base no custo estimado.

Isto significa que “a base de dados tem um índice” e “esta consulta permanece sempre em tempo constante” não são afirmações equivalentes. Intervalos temporais maiores e entidades mais ruidosas podem continuar a tornar relevantes mais páginas e linhas.

-15% OFF

A retenção do Recorder controla o desempenho e a capacidade

O Home Assistant elimina automaticamente dados do Recorder para impedir que os estados detalhados cresçam indefinidamente. Aumentar a retenção disponibiliza mais histórico de resolução completa, mas também aumenta o conjunto de trabalho histórico ativo, o tamanho das cópias de segurança e o trabalho de manutenção.

A documentação do Recorder avisa explicitamente que permitir que a base de dados cresça demasiado consome espaço em disco e pode tornar o Home Assistant lento. O comportamento predefinido de limpeza e compactação existe, em parte, para manter o crescimento da base de dados sob controlo.

Por isso, o período de retenção adequado é um requisito do produto. Mantenha os dados de alta resolução durante o tempo necessário para responder a questões reais da casa, não apenas porque há espaço disponível no disco.

O armazenamento e a cache determinam o custo aparente da mesma consulta

Um pedido repetido do Histórico pode ser mais rápido porque as páginas da base de dados e do sistema de ficheiros já estão presentes na memória. A mesma consulta após um reinício ou sob pressão de memória pode exigir mais leituras físicas. Outro serviço que escreva intensivamente no mesmo SSD também pode aumentar a latência sem alterar o pedido SQL.

A análise da ZimaSpace sobre o crescimento dos metadados e do histórico do Home Assistant explica as causas do lado da escrita. O desempenho das consultas é a consequência do lado da leitura: mais estados retidos só são relevantes quando o intervalo selecionado ou o conjunto de trabalho lhes toca efetivamente.

Meça o tempo das consultas em conjunto com a latência do armazenamento e a pressão de memória antes de mover bases de dados ou comprar hardware mais rápido.

Reduza o custo das consultas reduzindo dados desnecessários, não o histórico útil

  • Exclua entidades cujas alterações históricas não tenham valor para a tomada de decisões.
  • Reduza a frequência de atualização na origem quando as alterações de alta frequência não forem úteis.
  • Mantenha a retenção de dados brutos alinhada com o intervalo temporal que os utilizadores consultam efetivamente.
  • Utilize estatísticas de longo prazo para períodos extensos quando os agregados horários forem suficientes.
  • Mantenha o Recorder num armazenamento fiável e de baixa latência, com margem de espaço livre.
  • Compare o mesmo intervalo do Histórico antes e depois de cada alteração.

A métrica útil não é apenas o tamanho da base de dados. É a forma como a latência das consultas varia à medida que mudam as linhas retidas, o intervalo temporal solicitado, o estado da cache e as condições do armazenamento.

Perguntas frequentes

Uma base de dados do Recorder maior torna automaticamente mais lentas as automações locais?

Não. O controlo dos dispositivos em tempo real e as consultas históricas seguem caminhos separados. Podem afetar-se indiretamente quando o trabalho do Recorder cria contenção partilhada de CPU, memória ou armazenamento, mas um gráfico do Histórico lento não prova que o motor de automação esteja lento.

Centro de Tecnologia e IA

Mais para Ler

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.