Partilhar via


Métricas no EF Core

O Entity Framework Core (EF Core) expõe métricas numéricas contínuas que podem fornecer uma boa indicação da integridade do seu programa. Essas métricas podem ser usadas para as seguintes finalidades:

  • Acompanhe a carga geral do banco de dados em tempo real enquanto o aplicativo está sendo executado
  • Expor práticas de codificação problemáticas que podem levar a um desempenho degradado
  • Rastrear e isolar o comportamento anômalo do programa

Métricas

O EF Core relata métricas por meio da API padrão System.Diagnostics.Metrics . Microsoft.EntityFrameworkCore é o nome do contador. É recomendável ler a documentação do .NET sobre métricas.

Observação

Este recurso foi introduzido no EF Core 9.0. Consulte os contadores de eventos abaixo para obter versões mais antigas do EF Core.

Métricas e seu significado

Métrica: microsoft.entityframeworkcore.active_dbcontexts

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Número de instâncias ativas DbContext no momento.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.queries

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.queries Contador observável {query} Contagem cumulativa de consultas executadas.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.savechanges

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.savechanges Contador observável {savechanges} Contagem cumulativa de alterações salvas.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.compiled_query_cache_hits

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.compiled_query_cache_hits Contador observável {hits} Contagem total dos acertos no cache da consulta compilada.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.compiled_query_cache_misses

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.compiled_query_cache_misses Contador observável {misses} Contagem cumulativa de falhas para o cache de consulta compilado.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.execution_strategy_operation_failures

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.execution_strategy_operation_failures Contador observável {failure} Número acumulado de operações falhadas executadas por um IExecutionStrategy.

Disponível a partir de: Entity Framework Core 9.0.

Métrica: microsoft.entityframeworkcore.optimistic_concurrency_failures

Nome Tipo de Instrumento Unidade (UCUM) Descrição
microsoft.entityframeworkcore.optimistic_concurrency_failures Contador observável {failure} Número acumulado de falhas de concorrência otimista.

Disponível a partir de: Entity Framework Core 9.0.

Contadores de Eventos (legado)

O EF Core relata métricas por meio do recurso de contadores de eventos .NET padrão; Recomenda-se a leitura desta postagem no blog para obter uma rápida visão geral de como os contadores funcionam.

Anexar a um processo usando dotnet-counters

A ferramenta dotnet-counters pode ser usada para conectar-se a um processo em execução e relatar contadores de eventos EF Core regularmente; nada de especial precisa ser feito no programa para que esses contadores estejam disponíveis.

Primeiro, instale a dotnet-counters ferramenta: dotnet tool install --global dotnet-counters.

Em seguida, localize a ID do processo (PID) do processo .NET que executa o aplicativo EF Core:

  1. Abra o Gestor de Tarefas do Windows clicando com o botão direito do rato na barra de tarefas e selecionando "Gestor de Tarefas".
  2. Certifique-se de que a opção "Mais detalhes" está selecionada na parte inferior da janela.
  3. Na guia Processos, clique com o botão direito do mouse em uma coluna e verifique se a coluna PID está ativada.
  4. Localize seu aplicativo na lista de processos e obtenha sua ID de processo na coluna PID.

Dentro do seu aplicativo .NET, o ID do processo está disponível como Process.GetCurrentProcess().Id; isso pode ser útil para imprimir o PID na inicialização.

Finalmente, inicie dotnet-counters da seguinte forma:

dotnet counters monitor --counters Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters irá agora anexar-se ao seu processo em execução e começar a relatar dados contínuos do contador.

Press p to pause, r to resume, q to quit.
 Status: Running

[Microsoft.EntityFrameworkCore]
    Active DbContexts                                               1
    Execution Strategy Operation Failures (Count / 1 sec)           0
    Execution Strategy Operation Failures (Total)                   0
    Optimistic Concurrency Failures (Count / 1 sec)                 0
    Optimistic Concurrency Failures (Total)                         0
    Queries (Count / 1 sec)                                         1
    Queries (Total)                                               189
    Query Cache Hit Rate (%)                                      100
    SaveChanges (Count / 1 sec)                                     0
    SaveChanges (Total)                                             0

Contadores e seu significado

Nome do contador Descrição
DbContexts ativos
(active-db-contexts)
O número de instâncias DbContext ativas e não eliminadas atualmente na sua aplicação. Se esse número crescer continuamente, você pode ter um vazamento porque as instâncias DbContext não estão sendo descartadas corretamente. Observe que, se o pool de contexto estiver habilitado , esse número incluirá instâncias DbContext agrupadas que não estão em uso no momento.
Falhas na operação da estratégia de execução
total-execution-strategy-operation-failures e execution-strategy-operation-failures-per-second
O número de vezes que uma operação de banco de dados falhou ao ser executada. Se uma estratégia de execução repetitiva estiver habilitada, isso incluirá cada falha individual em várias tentativas na mesma operação. Isso pode ser usado para detetar problemas transitórios com sua infraestrutura.
Falhas de concorrência otimista
total-optimistic-concurrency-failures e optimistic-concurrency-failures-per-second
O número de vezes que SaveChanges falhou devido a um erro de concorrência otimista, porque os dados no armazenamento foram modificados desde que o seu código os carregou. Isto corresponde a um DbUpdateConcurrencyException ser lançado.
Consultas
total-queries e queries-per-second
O número de consultas executadas.
Taxa de acertos do cache de consultas (%)
(compiled-query-cache-hit-rate)
A proporção de acertos do cache de consulta para erros. A primeira vez que uma determinada consulta LINQ é executada pelo EF Core (excluindo parâmetros), ela deve ser compilada no que é um processo relativamente pesado. Numa aplicação normal, todas as interrogações são reutilizadas e a taxa de acerto do cache de interrogações deve ser estável a 100% após um período inicial de aquecimento. Se esse número for inferior a 100% ao longo do tempo, poderá enfrentar um desempenho degradado devido a compilações repetidas, o que pode ser resultado de uma geração subótima de consultas dinâmicas.
SalvarAlterações
total-save-changes e save-changes-per-second
O número de vezes SaveChanges foi chamado. Observe que SaveChanges salva várias alterações em um único lote, portanto, isso não representa necessariamente cada atualização individual feita em uma única entidade.

Recursos adicionais