Monitorar e depurar com insights no Azure Cosmos DB
APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table
O Azure Cosmos DB fornece insights de taxa de transferência, armazenamento, consistência, disponibilidade e latência. O portal do Microsoft Azure fornece uma visualização agregada dessas métricas. Você também pode exibir métricas do Azure Cosmos DB pela API do Azure Monitor. Os valores de dimensão para as métricas, como o nome do contêiner, não diferenciam maiúsculas de minúsculas. Portanto, ao comparar cadeias de caracteres nesses valores de dimensão, você precisa usar uma comparação que não diferencie maiúsculas e minúsculas. Para saber como visualizar métricas do Azure Monitor, confira o artigo Monitorar o Azure Cosmos DB.
Este artigo explica como casos de uso comuns e como as insights do Azure Cosmos DB podem ser usadas para analisar e depurar esses problemas. Por padrão, os insights de métrica são coletados a cada cinco minutos e são mantidos por sete dias.
As seções a seguir explicam cenários comuns em que você pode usar as métricas do Azure Cosmos DB.
Reconhecimento de quantas solicitações estão tendo sucesso ou causando erros
Para começar, vá para o portal do Azure e navegue até o painel Insights. Nessa painel, abra a guia Solicitações. A guia Solicitações mostra um gráfico com o total de solicitações segmentadas por código de status e tipo de operação. Para obter mais informações sobre códigos de status HTTP, consulte Códigos de status HTTP para o banco de dados do Microsoft Azure Cosmos DB.
O código de status de erro mais comum é 429 (limitação/limitação da taxa). Esse erro significa que as solicitações para o Azure Cosmos DB são mais do que a taxa de transferência provisionada. A solução mais comum para esse problema é expandir as RUs para determinada coleção. Para obter mais informações, confira o artigo Introdução à taxa de transferência provisionada no Azure Cosmos DB
Determinar o consumo de taxa de transferência por um intervalo de chaves de partição
Ter uma boa cardinalidade de suas chaves de partição é essencial para qualquer aplicativo escalonável. Para determinar a distribuição da taxa de transferência de qualquer contêiner particionado dividida por IDs do intervalo de chaves de partição, navegue até o painel Insights. Abra a guia Taxa de Transferência. O consumo normalizado de RU/s (unidades de solicitação) nos diferentes intervalos de chaves de partição é mostrado no gráfico.
Com a ajuda desse gráfico, você pode identificar se existe uma partição com acesso frequente. Os PartitionKeyRangeIDs correspondem a partições físicas. A métrica Consumo de RU Normalizado é um valor entre 0% e 100% que ajuda a medir a utilização da taxa de transferência provisionada em um banco de dados ou contêiner. Uma distribuição desigual de taxa de transferência pode causar a ocorrência de partições com acesso frequente, podendo resultar em uma limitação das solicitações e requerer um novo particionamento. Após identificar qual chave de partição está causando a distorção na distribuição, você precisará particionar o contêiner novamente com uma chave de partição mais distribuída. Para obter mais informações sobre o particionamento no Azure Cosmos DB, confira o artigo Partição e ampliação horizontal no Azure Cosmos DB.
Determinar o uso de dados e índices
É importante determinar a distribuição de armazenamento de qualquer contêiner particionado por uso de dados, uso de índice e uso de documentos. Você pode minimizar o uso do índice, maximizar o uso de dados e otimizar suas consultas. Para obter esses dados, vá para o painel Insights e abra a guia Armazenamento.
Compare o tamanho de dados em relação ao tamanho do índice
No Azure Cosmos DB, o armazenamento consumido total é uma combinação entre o tamanho dos dados e o tamanho do índice. Normalmente, o tamanho do índice é uma fração do tamanho dos dados. Para saber mais, confira o artigo Tamanho do índice. No painel Métricas no portal do Azure, a guia Armazenamento apresenta a divisão do consumo de armazenamento com base nos dados e no índice.
// Measure the document size usage (which includes the index size)
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));
Console.WriteLine("Document size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);
Se você quiser conservar espaço de índice, você poderá ajustar a política de indexação.
Depurar consultas lentas
Nos SDKs da API do NoSQL, o Azure Cosmos DB oferece estatísticas de execução de consulta.
IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),
"SELECT * FROM c WHERE c.city = 'Seattle'",
new FeedOptions
{
PopulateQueryMetrics = true,
MaxItemCount = -1,
MaxDegreeOfParallelism = -1,
EnableCrossPartitionQuery = true
}).AsDocumentQuery();
FeedResponse<dynamic> result = await query.ExecuteNextAsync();
// Returns metrics by partition key range Id
IReadOnlyDictionary<string, QueryMetrics> metrics = result.QueryMetrics;
O QueryMetrics fornece detalhes de quanto tempo durou a execução de cada componente da consulta. A causa raiz mais comum para consultas de execução prolongada são as varreduras, o que significa que a consulta não conseguiu aplicar os índices. Esse problema pode ser resolvido com uma melhor condição de filtro.
Monitorar solicitações do painel de controle
O Azure Cosmos DB aplica limites ao número de solicitações de metadados que podem ser feitas em intervalos consecutivos de 5 minutos. As solicitações do painel de controle que ultrapassarem esses limites poderão enfrentar limitação. As solicitações de metadados podem, em alguns casos, consumir a taxa de transferência referente a uma master partition
dentro de uma conta que contém todos os metadados de uma conta. As solicitações do painel de controle que ultrapassarem o valor da taxa de transferência irão enfrentar uma limitação de taxa (429 s).
Para começar, vá para o portal do Azure e navegue até o painel Insights. Nesse painel, abra a guia Sistema. A guia Sistema mostra dois gráficos. Um deles mostra todas as solicitações de metadados para uma conta. O outro mostra o consumo de taxa de transferência das solicitações de metadados da master partition
da conta que armazena os metadados de uma conta.
O grafo Solicitação de Metadados por Código de Status acima agrega solicitações com granularidade crescente à medida que você aumenta o Intervalo de Tempo. O maior Intervalo de Tempo que você pode usar para um compartimento de tempo de 5 minutos é de 4 horas. Para monitorar as solicitações de metadados em um intervalo de tempo maior com granularidade específica, use as Métricas do Azure. Crie um novo gráfico e selecione a métrica Solicitações de Metadados. No canto superior direito, selecione 5 minutos para Granularidade de Tempo, conforme visto abaixo. As métricas também permitem aos usuários Criar Alertas relativos a elas, o que as torna mais úteis do que o Insights.
Próximas etapas
Você pode querer saber mais sobre como aprimorar o desempenho do banco de dados lendo os seguintes artigos: