EF Core의 메트릭
EF Core(Entity Framework Core)는 프로그램의 상태를 잘 나타낼 수 있는 연속 숫자 메트릭을 노출합니다. VHD 파일은 다음과 같은 용도로 사용할 수 있습니다.
- 애플리케이션이 실행 중일 때 실시간으로 일반 데이터베이스 로드 추적
- 성능 저하로 이어질 수 있는 문제가 있는 코딩 사례 노출
- 비정상적인 프로그램 동작 추적 및 격리
메트릭
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) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.active_dbcontexts |
ObservableUpDownCounter | {dbcontext} |
현재 활성 DbContext 인스턴스 수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.queries
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.queries |
ObservableCounter | {query} |
실행된 쿼리의 누적 수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.savechanges
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.savechanges |
ObservableCounter | {savechanges} |
저장된 누적 변경 횟수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.compiled_query_cache_hits
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_hits |
ObservableCounter | {hits} |
컴파일된 쿼리 캐시의 누적 적중 횟수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.compiled_query_cache_misses
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_misses |
ObservableCounter | {misses} |
컴파일된 쿼리 캐시의 누적 누락 횟수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.execution_strategy_operation_failures
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.execution_strategy_operation_failures |
ObservableCounter | {failure} |
IExecutionStrategy 에서 실행된 실패한 작업의 누적 수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
메트릭: microsoft.entityframeworkcore.optimistic_concurrency_failures
이름 | 계측 유형 | 단위(UCUM) | 설명 |
---|---|---|---|
microsoft.entityframeworkcore.optimistic_concurrency_failures |
ObservableCounter | {failure} |
낙관적 동시성 오류의 누적 수입니다. |
.NET Framework 9.0부터 사용할 수 있습니다.
이벤트 카운터(레거시)
EF Core는 표준 .NET 이벤트 카운터 기능을 통해 메트릭을 보고합니다. 카운터 작동 방식에 대한 간략한 개요를 보려면 이 블로그 게시물을 읽어보는 것이 좋습니다.
dotnet-counters를 사용하여 프로세스에 연결
dotnet-counters 도구를 사용하여 실행 중인 프로세스에 연결하고 EF Core 이벤트 카운터를 정기적으로 보고할 수 있습니다. 이러한 카운터를 사용하기 위해 프로그램에서 특별한 작업을 수행할 필요는 없습니다.
먼저 dotnet-counters
도구를 설치합니다. dotnet tool install --global dotnet-counters
.
다음으로, EF Core 애플리케이션을 실행하는 .NET 프로세스의 PID(프로세스 ID)를 찾습니다.
- 작업 표시줄을 마우스 오른쪽 단추로 클릭하고 "작업 관리자"를 선택하여 Windows 작업 관리자를 엽니다.
- 창 아래쪽에서 "자세히" 옵션이 선택되어 있는지 확인합니다.
- 프로세스 탭에서 열을 마우스 오른쪽 단추로 클릭하고 PID 열이 사용하도록 설정되어 있는지 확인합니다.
- 프로세스 목록에서 애플리케이션을 찾고 PID 열에서 해당 프로세스 ID를 가져옵니다.
.NET 애플리케이션 내에서 프로세스 ID를 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
카운터 및 해당 의미
카운터 이름 | 설명 |
---|---|
활성 DbContexts () |
현재 애플리케이션에 있는 활성, 노출되지 않은 DbContext 인스턴스 수입니다. 이 숫자가 지속적으로 증가하는 경우 DbContext 인스턴스가 제대로 삭제되지 않으므로 누수가 발생할 수 있습니다. 컨텍스트 풀링을 사용하는 경우 이 번호에는 현재 사용하지 않는 풀링된 DbContext 인스턴스가 포함됩니다. |
실행 전략 작업 실패 ( total-execution-strategy-operation-failures 및 execution-strategy-operation-failures-per-second ) |
데이터베이스 작업을 실행하지 못한 횟수입니다. 재시도 실행 전략을 사용하도록 설정하면 동일한 작업에 대한 여러 번의 시도 내에서 각 개별 오류가 포함됩니다. 인프라의 일시적인 문제를 검색하는 데 사용할 수 있습니다. |
낙관적 동시성 오류 ( total-optimistic-concurrency-failures 및 optimistic-concurrency-failures-per-second ) |
코드가 로드된 이후 데이터 저장소의 데이터가 변경되었기 때문에 SaveChanges 가 낙관적 동시성 오류로 인해 실패한 횟수입니다. 이는 throw되는 DbUpdateConcurrencyException에 해당합니다. |
쿼리 ( total-queries 및 queries-per-second ) |
실행된 쿼리 수입니다. |
쿼리 캐시 적중률(%) () |
쿼리 캐시 적중이 누락된 비율입니다. 지정된 LINQ 쿼리가 EF Core에 의해 처음 실행될 때(매개 변수 제외) 비교적 많은 프로세스에서 컴파일되어야 합니다. 일반 애플리케이션에서는 모든 쿼리가 다시 사용되며 쿼리 캐시 적중률은 초기 준비 기간 후 100%에서 안정적이어야 합니다. 시간이 지남에 따라 이 숫자가 100% 미만이면 반복된 컴파일로 인해 성능이 저하될 수 있으며, 이는 최적이 아닌 동적 쿼리 생성의 결과일 수 있습니다. |
SaveChanges ( total-save-changes 및 save-changes-per-second ) |
이 인스턴스에서 SaveChanges 가 호출된 횟수를 가져옵니다. SaveChanges 는 단일 일괄 처리에 여러 변경 내용을 저장하므로 단일 엔터티에서 수행된 각 개별 업데이트를 반드시 나타내는 것은 아닙니다. |
추가 리소스
.NET