Счетчики событий

Примечание

Эта функция была добавлена в EF Core 5.0.

Entity Framework Core (EF Core) предоставляет непрерывные числовые метрики, которые могут предоставить хорошее указание о работоспособности программы. Эти метрики можно использовать в следующих целях:

  • Отследите общую нагрузку базы данных в режиме реального времени, так как приложение выполняется
  • Раскрывайте проблемные методики программирования, которые могут привести к снижению производительности
  • Мониторинг и изолирование аномального поведения программы

EF Core отчеты метрик с помощью стандартной функции счетчиков событий .NET; рекомендуется прочитать эту запись блога для быстрого обзора работы счетчиков.

Присоединение к процессу с помощью DotNet-Counters

Инструмент DotNet-Counters можно использовать для одновременного присоединения к выполняющемуся процессу и отчетов EF Core счетчиков событий. чтобы эти счетчики были доступны, в программе ничего делать не нужно.

Сначала установите dotnet-counters средство: dotnet tool install --global dotnet-counters .

Затем найдите идентификатор процесса (PID) процесса .NET, выполняющего приложение EF Core:

  1. откройте диспетчер задач Windows, щелкнув правой кнопкой мыши панель задач и выбрав пункт "диспетчер задач".
  2. Убедитесь, что в нижней части окна выбран параметр "Дополнительные сведения".
  3. На вкладке процессы щелкните правой кнопкой мыши столбец и убедитесь, что столбец PID включен.
  4. В списке процесс выберите приложение и получите идентификатор его процесса из столбца 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

Счетчики и их значения

Имя счетчика Описание
Активные 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 сохраняет несколько изменений в одном пакете, поэтому это не обязательно представляет каждое отдельное обновление, выполненное в одной сущности.

Дополнительные ресурсы