Métricas no EF Core
O EF Core (Entity Framework 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 com as seguintes finalidades:
- Acompanhar a carga geral do banco de dados em tempo real enquanto o aplicativo está em execução
- Expor práticas de codificação problemáticas que podem levar a um desempenho degradado
- Rastrear e isolar um 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 medidor. É recomendável ler a documentação do .NET sobre métricas.
Observação
Esse recurso está sendo introduzido no EF Core 9.0 (em versão prévia). Consulte os contadores de eventos abaixo para versões mais antigas do EF Core.
Métricas e seu significado
microsoft.entityframeworkcore.active_dbcontexts
microsoft.entityframeworkcore.queries
microsoft.entityframeworkcore.savechanges
microsoft.entityframeworkcore.compiled_query_cache_hits
microsoft.entityframeworkcore.compiled_query_cache_misses
microsoft.entityframeworkcore.execution_strategy_operation_failures
microsoft.entityframeworkcore.optimistic_concurrency_failures
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 DbContext ativas 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 |
ObservableCounter | {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 |
ObservableCounter | {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 |
ObservableCounter | {hits} |
Contagem cumulativa de ocorrências para o cache de consulta compilado. |
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 |
ObservableCounter | {misses} |
Contagem cumulativa de perdas 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 |
ObservableCounter | {failure} |
Número cumulativo de operação com falha executada por uma 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 |
ObservableCounter | {failure} |
Número cumulativo de falhas de simultaneidade otimistas. |
Disponível a partir de: Entity Framework Core 9.0.
Contadores de eventos (herdado)
O EF Core relata métricas por meio do recurso de contadores de eventos .NET padrão. É recomendável ler esta postagem no blog para obter uma visão geral rápida de como os contadores funcionam.
Anexar a um processo usando a ferramenta dotnet-counters
A ferramenta dotnet-counters pode ser usada para anexar a um processo em execução e fazer relatórios sobre contadores de eventos do EF Core regularmente; nada de especial precisa ser feito no programa para que esses contadores fiquem disponíveis.
Primeiro, instale a ferramenta dotnet-counters
: dotnet tool install --global dotnet-counters
.
Em seguida, localize a ID do processo (PID) do processo do .NET executando seu aplicativo EF Core:
- Abra o Gerenciador de Tarefas do Windows clicando com o botão direito do mouse na barra de tarefas e selecionando "Gerenciador de Tarefas".
- Verifique se a opção "Mais detalhes" está selecionada na parte inferior da janela.
- Na guia Processos, clique com o botão direito do mouse em uma coluna e verifique se a coluna PID está habilitada.
- Localize seu aplicativo na lista de processos e obtenha sua ID de processo da coluna PID.
Dentro de seu aplicativo .NET, a ID do processo está disponível como Process.GetCurrentProcess().Id
; isso pode ser útil para imprimir o PID na inicialização.
Por fim, inicie dotnet-counters
da seguinte maneira:
dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>
O dotnet-counters
agora será anexado ao 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 expostas atualmente em seu aplicativo. Se esse número aumentar continuamente, você poderá 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 inclui instâncias DbContext em pool 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 de repetição estiver habilitada, isso incluirá cada falha individual em várias tentativas na mesma operação. Isso pode ser usado para detectar problemas transitórios com sua infraestrutura. |
Falhas de simultaneidade otimistas ( total-optimistic-concurrency-failures e optimistic-concurrency-failures-per-second ) |
O número de vezes SaveChanges falhou devido a um erro de simultaneidade otimista, pois os dados no armazenamento de dados foram alterados desde que o código o carregou. Isso corresponde a uma DbUpdateConcurrencyException sendo gerada. |
Consultas ( total-queries e queries-per-second ) |
O número de consultas executadas. |
Taxa de ocorrência no cache de consulta (%) ( compiled-query-cache-hit-rate ) |
A proporção de ocorrências no cache de consulta em relação aos erros. Na primeira vez em que uma determinada consulta LINQ é executada pelo EF Core (excluindo parâmetros), ela deve ser compilada no que é um processo relativamente pesado. Em um aplicativo normal, todas as consultas são reutilizados e a taxa de ocorrência do cache de consultas deve ficar estável em 100% após um período de aquecimento inicial. Se esse número for menor que 100% ao longo do tempo, você poderá experimentar um desempenho degradado devido a compilações repetidas, o que pode ser resultado de uma geração de consulta dinâmica abaixo do ideal. |
SaveChanges ( 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. |