Метрики в EF Core
Entity Framework Core (EF Core) предоставляет непрерывные числовые метрики, которые могут обеспечить хорошее представление о работоспособности вашей программы. Эти метрики можно использовать в следующих целях:
- Отслеживание общей загрузки базы данных в режиме реального времени при запуске приложения
- Предоставление проблемных методов кодирования, которые могут привести к снижению производительности
- Отслеживание и изоляция аномального поведения программы
Метрики
EF Core сообщает метрики через стандартный System.Diagnostics.Metrics API. Microsoft.EntityFrameworkCore
— имя счетчика. Рекомендуется ознакомиться с документацией .NET по метрикам.
Примечание.
Эта функция представлена в EF Core 9.0 (в предварительной версии). Ознакомьтесь со счетчиками событий ниже для более старых версий EF Core.
Метрики и их смысл
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
Метрика: microsoft.entityframeworkcore.active_dbcontexts
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.active_dbcontexts |
ObservableUpDownCounter | {dbcontext} |
Число текущих активных DbContext экземпляров. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.queries
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.queries |
ObservableCounter | {query} |
Совокупное количество выполненных запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.savechanges
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.savechanges |
ObservableCounter | {savechanges} |
Совокупное количество сохраненных изменений. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.compiled_query_cache_hits
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_hits |
ObservableCounter | {hits} |
Совокупное количество попаданий для скомпилированного кэша запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.compiled_query_cache_misses
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_misses |
ObservableCounter | {misses} |
Совокупное количество промахов для скомпилированного кэша запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.execution_strategy_operation_failures
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.execution_strategy_operation_failures |
ObservableCounter | {failure} |
Совокупное число неудачных операций, выполняемых с IExecutionStrategy помощью объекта . |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.optimistic_concurrency_failures
Имя. | Тип инструмента | Единица (UCUM) | Description |
---|---|---|---|
microsoft.entityframeworkcore.optimistic_concurrency_failures |
ObservableCounter | {failure} |
Совокупное число сбоев оптимистического параллелизма. |
Доступно начиная с: Entity Framework Core 9.0.
Счетчики событий (устаревшие версии)
EF Core сообщает метрики с помощью стандартной функции счетчиков событий .NET; Рекомендуется ознакомиться с этой записью блога, чтобы получить краткий обзор работы счетчиков.
Присоединение к процессу с помощью счетчиков dotnet-counters
Средство dotnet-counters можно использовать для присоединения к запущенным процессам и регулярного отчета счетчиков событий EF Core. Для доступа к этим счетчикам не требуется ничего особенного.
Сначала установите dotnet-counters
средство: dotnet tool install --global dotnet-counters
Затем найдите идентификатор процесса (PID) процесса для процесса .NET, выполняющего приложение EF Core:
- Откройте диспетчер задач Windows, щелкнув правой кнопкой мыши панель задач и выбрав "Диспетчер задач".
- Убедитесь, что в нижней части окна выбран параметр "Дополнительные сведения".
- На вкладке "Процессы" щелкните правой кнопкой мыши столбец и убедитесь, что столбец PID включен.
- Найдите приложение в списке процессов и получите его идентификатор процесса из столбца PID.
В приложении .NET идентификатор процесса доступен, так как Process.GetCurrentProcess().Id
это может быть полезно для печати PID при запуске.
Наконец, запустите dotnet-counters
следующее:
dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>
dotnet-counters
Теперь подключитесь к выполняемой процедуре и начнет создавать отчеты о непрерывных данных счетчиков:
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
Счетчики и их смысл
Имя счетчика | Description |
---|---|
Активные dbContexts ( active-db-contexts ) |
Количество активных нерасположенных экземпляров DbContext в настоящее время в приложении. Если это число постоянно растет, может возникнуть утечка, так как экземпляры DbContext не удаляются должным образом. Обратите внимание, что если пул контекстов включен, это число включает в себя экземпляры DbContext, которые в настоящее время не используются. |
Сбои стратегии выполнения ( total-execution-strategy-operation-failures и execution-strategy-operation-failures-per-second ) |
Количество неудачных операций базы данных. Если включена стратегия повтора выполнения, это включает каждый отдельный сбой в рамках нескольких попыток одной операции. Это можно использовать для обнаружения временных проблем с инфраструктурой. |
Оптимистические сбои параллелизма ( total-optimistic-concurrency-failures и optimistic-concurrency-failures-per-second ) |
Количество SaveChanges неудачных попыток из-за ошибки оптимистического параллелизма, так как данные в хранилище данных были изменены после загрузки кода. Это соответствует создаваемому объекту DbUpdateConcurrencyException . |
Запросов ( total-queries и queries-per-second ) |
Количество выполненных запросов. |
Частота попаданий кэша запросов (%) ( compiled-query-cache-hit-rate ) |
Соотношение попаданий кэша запросов к пропущенным. При первом выполнении заданного запроса LINQ EF Core (за исключением параметров), его необходимо скомпилировать в том, что является относительно тяжелым процессом. В обычном приложении все запросы повторно используются, а скорость попадания кэша запросов должна быть стабильной в 100% после начального периода разогрева. Если это число меньше 100 % с течением времени, вы можете столкнуться с снижением производительности из-за повторяющихся компиляций, что может быть результатом неоптимального создания динамических запросов. |
SaveChanges ( total-save-changes и save-changes-per-second ) |
Число раз SaveChanges было вызвано. Обратите внимание, что SaveChanges сохраняет несколько изменений в одном пакете, поэтому это не обязательно представляет каждое отдельное обновление, выполняемое в одной сущности. |