Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Entity Framework Core (EF Core) предоставляет непрерывные числовые метрики, которые могут обеспечить хорошее представление о работоспособности вашей программы. Эти метрики можно использовать в следующих целях:
- Отслеживание общей загрузки базы данных в режиме реального времени при запуске приложения
- Выявление проблемных практик кодирования, которые могут привести к снижению производительности
- Отслеживание и изоляция аномального поведения программы
Метрики
EF Core сообщает метрики через стандартный System.Diagnostics.Metrics API.
Microsoft.EntityFrameworkCore — имя счетчика. Рекомендуется ознакомиться с документацией .NET по метрикам.
Примечание.
Эта функция появилась в EF Core 9.0. Ознакомьтесь со счетчиками событий ниже для более старых версий EF Core.
Метрики и их смысл
microsoft.entityframeworkcore.active_dbcontextsmicrosoft.entityframeworkcore.queriesmicrosoft.entityframeworkcore.savechangesmicrosoft.entityframeworkcore.compiled_query_cache_hitsmicrosoft.entityframeworkcore.compiled_query_cache_missesmicrosoft.entityframeworkcore.execution_strategy_operation_failuresmicrosoft.entityframeworkcore.optimistic_concurrency_failures
Метрика: microsoft.entityframeworkcore.active_dbcontexts
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.active_dbcontexts |
ObservableUpDownCounter (ОбзерваблАпДаунКантер) | {dbcontext} |
Число текущих активных DbContext экземпляров. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.queries
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.queries |
ObservableCounter | {query} |
Совокупное количество выполненных запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.savechanges
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.savechanges |
ObservableCounter | {savechanges} |
Совокупное количество сохраненных изменений. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.compiled_query_cache_hits
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_hits |
ObservableCounter | {hits} |
Совокупное количество обращений для компилированного кэша запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.compiled_query_cache_misses
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_misses |
ObservableCounter | {misses} |
Совокупное количество промахов для скомпилированного кэша запросов. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.execution_strategy_operation_failures
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
microsoft.entityframeworkcore.execution_strategy_operation_failures |
ObservableCounter | {failure} |
Совокупное число ошибочных операций, выполненных объектом IExecutionStrategy. |
Доступно начиная с: Entity Framework Core 9.0.
Метрика: microsoft.entityframeworkcore.optimistic_concurrency_failures
| Имя. | Тип инструмента | Единица (UCUM) | Описание |
|---|---|---|---|
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 --counters 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
Счетчики и их смысл
| Имя счетчика | Описание |
|---|---|
| Активные DbContext'ы ( 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 % с течением времени, вы можете столкнуться с снижением производительности из-за повторяющихся компиляций, что может быть результатом неоптимального создания динамических запросов. |
| Сохранить изменения ( total-save-changes и save-changes-per-second) |
Количество вызовов SaveChanges. Обратите внимание, что SaveChanges сохраняет несколько изменений в одном пакете, поэтому это не обязательно означает каждое индивидуальное обновление, выполняемое на единой сущности. |