Use esta referência para identificar a causa raiz de um evento de latência do Redis e aplicar a correção adequada.
Antes de começar
Verifique estas causas comuns antes de analisar eventos específicos:
Comandos lentos. Comandos que varrem todas as chaves (por exemplo,
KEYS) bloqueiam a thread principal. Revise os logs de consultas lentas para encontrá-los. Consulte Consultar logs de consultas lentas.Chaves grandes. Chaves grandes retardam a evicção e a expiração. Use a análise de chaves offline para identificá-las. Consulte Usar o recurso de análise de chaves offline.
Alto uso de memória. Quando a memória ocupada excede o limite
maxmemory, o Redis executa ciclos de evicção com frequência. Consulte Alterar as configurações de uma instância.
Contexto
O Redis 2.8.13 introduziu o monitoramento de latência, que coleta dados dos últimos 160 segundos e registra apenas o evento de maior latência por segundo.
O Tair (compatível com Redis OSS) oferece insights de latência, uma alternativa avançada. Esse recurso registra até 27 eventos com a duração de execução de todos os comandos e retém estatísticas de latência dos últimos três dias. Para obter os nomes dos eventos e seus respectivos limiares de latência, consulte Eventos especiais comuns.
Eventos comuns de latência
Alguns eventos possuem uma relação pai-filho:
**
AofWrite** é o evento pai. Sempre que o Redis grava dados em um arquivo append-only (AOF), ele registraAofWritejunto com exatamente um de três eventos filhos:AofWriteAlone,AofWriteActiveChildouAofWritePendingFsync. Para encontrar a causa específica, execute a análise do evento filho.**
EvictionCycle** é o evento pai para evicção. AnaliseEvictionDeleEvictionLazyFreeem conjunto para determinar a causa da latência de evicção.
|
Evento |
O que mede |
Causa comum |
O que fazer |
|
|
Tempo para um ciclo completo de evicção, incluindo seleção de chaves, exclusão e espera da thread em segundo plano |
Múltiplos fatores — analise |
Revise o uso de chaves e otimize os dados do negócio. Caso as evicções sejam frequentes, aumente a escala da instância para manter o uso de memória abaixo de |
|
|
Tempo para excluir chaves durante um ciclo de evicção |
Evicção de chaves grandes |
Evite chaves grandes. Ative a evicção assíncrona: defina |
|
|
Tempo de espera para que as threads em segundo plano liberem memória |
Não há chaves passíveis de evicção disponíveis enquanto as threads em segundo plano liberam memória (por exemplo, ao excluir chaves grandes) |
Ajuste a política de evicção de memória usando o parâmetro |
|
|
Tempo para um ciclo de expiração de chaves |
Exclusão de chaves grandes |
Evite o uso de chaves grandes. Ative a expiração assíncrona: defina |
|
|
Tempo para excluir chaves durante um ciclo de expiração de chaves |
Exclusão de chaves grandes |
Não utilize chaves grandes. |
|
|
Tempo total para gravar dados em AOFs |
Múltiplos fatores — analise |
Se a persistência de dados não for necessária, desative o AOF: defina |
|
|
Tempo para uma gravação de AOF sem processos filhos simultâneos ou fsync pendente |
Grande volume de gravação ou gargalos de desempenho do disco |
Caso o AOF não seja necessário, configure |
|
|
Tempo para uma gravação de AOF enquanto processos filhos também gravam no disco |
Concorrência de E/S de disco do processo filho com gravações de AOF |
Quando o AOF não for necessário, altere |
|
|
Tempo para uma gravação de AOF durante a execução de um fsync em segundo plano |
Concorrência do fsync em segundo plano com gravações de AOF |
Se não precisar do AOF, mude |
|
|
Tempo para comandos regulares (não rotulados como rápidos) |
Comandos que percorrem todos os dados, como |
Revise os logs de consultas lentas para encontrar comandos de longa duração. Use a análise de chaves offline para verificar a existência de chaves grandes. |
|
|
Tempo para comandos rápidos com complexidade O(1) ou O(log N) |
Comandos rápidos que copiam grandes quantidades de dados (por exemplo, |
Identifique e divida chaves grandes. Consulte Identificar e lidar com chaves grandes e hotkeys. |
|
|
Tempo para chamar |
Reescritas de AOF |
Caso não precise de persistência de dados, desative o AOF configurando |