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 investigar eventos específicos:
Comandos lentos. Comandos que percorrem todas as chaves (por exemplo,
KEYS) bloqueiam a thread principal. Revise os logs de consultas lentas para identificá-los. Consulte Query slow query logs.Chaves grandes. Chaves grandes retardam a evicção e a expiração. Use a análise de chaves offline para identificá-las. Consulte Use the offline key analysis feature.
Alto uso de memória. Quando a memória ocupada excede o limite
maxmemory, os ciclos de evicção ocorrem frequentemente. Consulte Change the configurations of an instance.
Contexto
O Redis 2.8.13 introduziu o monitoramento de latência. Esse recurso 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 o latency insights, uma alternativa avançada que registra até 27 eventos com as durações de execução de todos os comandos e mantém estatísticas de latência dos últimos três dias. Para nomes de eventos e seus respectivos limiares de latência, consulte Common special events.
Eventos comuns de latência
Alguns eventos possuem relação pai-filho:
**
AofWrite** é o evento pai. Sempre que dados são gravados em um arquivo append-only (AOF), o Redis registraAofWritejunto a exatamente um destes três eventos filhos:AofWriteAlone,AofWriteActiveChildouAofWritePendingFsync. Analise o evento filho para encontrar a causa específica.**
EvictionCycle** é o evento pai da evicção. AnaliseEvictionDeleEvictionLazyFreeem conjunto para determinar a origem da latência de evicção.
|
Evento |
O que mede |
Causa comum |
Ação recomendada |
|
|
Tempo de 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 das chaves e otimize os dados da aplicação. Se as evicções forem frequentes, aumente a escala da instância para manter o uso de memória abaixo de |
|
|
Tempo para exclua chaves durante um ciclo de evicção |
Evicção de chaves grandes |
Evite chaves grandes. Ative a evicção assíncrona definindo |
|
|
Tempo de espera pelas threads em segundo plano liberarem memória |
Ausência de chaves elegíveis para evicção enquanto threads em segundo plano liberam memória (por exemplo, ao exclua chaves grandes) |
Ajuste a política de evicção de memória usando o parâmetro |
|
|
Tempo de um ciclo de expiração de chaves |
Exclusão de chaves grandes |
Evite chaves grandes. Ative a expiração assíncrona definindo |
|
|
Tempo para exclua chaves durante um ciclo de expiração |
Exclusão de chaves grandes |
Evite chaves grandes. |
|
|
Tempo total para gravar dados nos AOFs |
Múltiplos fatores — analise |
Se a persistência de dados não for necessária, desative o AOF definindo |
|
|
Tempo de uma gravação AOF sem processos filhos concorrentes ou fsync pendente |
Grande volume de gravação ou gargalos de desempenho do disco |
Se o AOF não for necessário, defina |
|
|
Tempo de uma gravação AOF enquanto processos filhos também gravam no disco |
E/S de disco do processo filho competindo com gravações AOF |
Se o AOF não for necessário, defina |
|
|
Tempo de uma gravação AOF durante um fsync em segundo plano |
Fsync em segundo plano competindo com gravações AOF |
Se o AOF não for necessário, defina |
|
|
Tempo de comandos regulares (não classificados 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 de comandos rápidos com complexidade O(1) ou O(log N) |
Comandos rápidos copiando grandes volumes de dados (por exemplo, |
Identifique e divida chaves grandes. Consulte Identify and handle large keys and hotkeys. |
|
|
Tempo para chamar |
Reescritas de AOF |
Se a persistência de dados não for necessária, desative o AOF definindo |