Métricas de latência

Nesta página, descrevemos as métricas de latência que o Cloud Spanner oferece. Caso seu aplicativo apresente alta latência, use essas métricas para diagnosticar e resolver o problema.

É possível visualizar essas métricas no console do Google Cloud e no console do Cloud Monitoring. A página "Monitoramento" no console do Google Cloud mostra duas métricas relacionadas à latência. O primeiro é para Latência, e o segundo é para Latência por tipo de transação.

Latência

As métricas de latência do Spanner medem o tempo necessário para o Spanner processar as funções de solicitação de leitura (Read, StreamingRead, ExecuteSql, StreamingExecuteSql, ExecuteBatchDml) ou gravação (Commit). Selecione "Leitura/gravação" para ver as métricas de ambos. A métrica captura o tempo real decorrido, não a quantidade de tempo de CPU que o Spanner usou.

Essas métricas de latência não incluem latência que ocorre fora do Spanner, como latência de rede e latência dentro da camada do aplicativo. Para medir outros tipos de latência, use o Cloud Monitoring para instrumentar seu aplicativo com métricas personalizadas.

É possível visualizar métricas de latência no console do Google Cloud e no console do Cloud Monitoring. É possível visualizar métricas combinadas de latência que incluem funções de leitura e gravação ou visualizar métricas separadas para leituras e gravações.

Com base na latência de cada solicitação, o Spanner agrupa as solicitações em percentis. É possível ver as métricas de latência do 50o percentil e do 99o percentil de latência:

  • Latência do 50º percentil: a latência máxima, em segundos, das solicitações mais rápidas. Nesse caso, o número de solicitações consideradas é 50%. Por exemplo, se a latência do 50o percentil for de 0,5 segundo, o Spanner processará 50% das solicitações em menos de 0,5 segundo.

    Algumas vezes, essa métrica é chamada de latência mediana.

  • Latência do 99º percentil: a latência máxima, em segundos, das solicitações mais rápidas. Nesse caso, o número de solicitações consideradas é 99%. Por exemplo, se a latência do 99o percentil for de dois segundos, o Spanner processará 99% das solicitações em menos de dois segundos.

Latência e operações por segundo

Quando uma instância processa um pequeno número de solicitações durante determinado período, as latências do 50º e do 99º percentis durante esse período não são indicadores significativos do desempenho geral da instância. Nessas condições, um número muito pequeno de outliers pode mudar drasticamente as métricas de latência.

Por exemplo, imagine que uma instância processe 100 solicitações durante uma hora. Nesse caso, a latência do 99º percentil da instância durante essa hora é o tempo necessário para processar o pedido mais lento. Uma medida de latência com base em uma única solicitação não é significativa.

Latência por tipo de transação

As métricas de latência por tipo de transação para o Spanner medem e mostram o tempo que o Spanner levou para processar uma transação. É possível visualizar métricas para transações de leitura e gravação e somente leitura. O tipo de transação "leitura e gravação" inclui todas as transações de leitura e gravação, e o tipo de transação "somente leitura" inclui todas as transações somente leitura, bem como métodos de leitura única.

Assim como as métricas de latência, esses gráficos agrupam os dados em percentis. É possível ver a métrica de latência por tipo de transação para a latência do 50o percentil e do 99o percentil.

Uma grande diferença entre a métrica de latência e a de latência por tipo de transação é que o gráfico de latência por tipo de transação permite detalhar o tipo de transação somente leitura por: "O líder está envolvido" ou "Nenhum líder está envolvido". Selecionar "O líder está envolvido" mostra um gráfico com as solicitações que envolveram o líder. Por exemplo, se uma leitura forte é solicitada de uma réplica somente leitura, o líder é consultado para garantir que a réplica somente leitura tenha os dados mais recentes. Nesse caso, selecionar "O líder está envolvido" ajuda a avaliar o tempo total que levou para que a transação de leitura forte seja processada. Se você selecionar "Nenhum líder envolvido", o gráfico mostrará as leituras em que nenhum líder foi envolvido. Por exemplo, se uma leitura desatualizada com o limite de carimbo de data/hora definido para pelo menos 15 segundos for solicitada em uma réplica somente leitura, a réplica somente leitura poderá veicular a leitura desatualizada sem envolver o líder. Em comparação, as leituras que envolvem o líder podem ter uma latência maior. É possível usar esses gráficos para avaliar a diferença na latência entre as leituras fortes e as desatualizadas. Observe que, em alguns casos, uma leitura desatualizada também pode ser veiculada por um líder e, nesses casos, as leituras desatualizadas são exibidas no gráfico "O líder está envolvido".

Para transações de leitura e gravação, o líder está sempre envolvido na transação. Portanto, os dados mostrados no gráfico sempre incluem o tempo necessário para que a solicitação alcance o líder e receba uma resposta.

Como diagnosticar problemas de latência

Nas seções a seguir, veja como diagnosticar vários problemas comuns capazes de levar seu aplicativo a alta latência de ponta a ponta.

Para ter uma visão rápida das métricas de latência de uma instância, use o console do Google Cloud. Para examinar as métricas mais de perto e encontrar correlações entre a latência e outras métricas, use o console do Cloud Monitoring.

Alta latência total, baixa latência do Spanner

Se o aplicativo tiver uma latência maior do que o esperado, mas as métricas de latência do Spanner forem significativamente menores do que a latência total de ponta a ponta, pode haver um problema no código do aplicativo. Caso seu aplicativo tenha um problema de desempenho que cause lentidão em alguns caminhos do código, a latência total de ponta a ponta para cada solicitação pode aumentar.

Para verificar esse problema, faça um benchmark de seu aplicativo para identificar os caminhos do código que estão mais lentos do que o esperado.

Você também pode comentar o código que se comunica com o Spanner e medir a latência total novamente. Se a latência total não mudar muito, é improvável que o Spanner seja a causa da alta latência.

Alta latência total, alta latência do Spanner

Se o aplicativo tiver uma latência maior do que o esperado e as métricas de latência do Spanner também forem altas, há algumas causas prováveis:

  • A instância precisa de mais capacidade de computação. Se a instância não tiver recursos de CPU suficientes e a utilização de CPU dela exceder o máximo recomendado, talvez o Spanner não consiga processar suas solicitações de maneira rápida e eficiente.

  • Algumas de suas consultas causam alta utilização da CPU. Se as consultas não aproveitarem os recursos do Spanner que melhoram a eficiência, como parâmetros de consulta e índices secundários, ou se incluírem um grande número de mesclagens ou outras operações com uso intensivo da CPU, as consultas poderão usar uma grande parte dos recursos da CPU para sua instância.

Para verificar esses problemas, use o Console do Cloud Monitoring para procurar uma correlação entre alta utilização da CPU e alta latência. Verifique também as estatísticas de consultas da sua instância para identificar se há consultas que exigem muito consumo de CPU durante o mesmo período.

Se você descobrir que a utilização de CPU e a latência estão altas ao mesmo tempo, faça algo para solucionar o problema:

A seguir