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。
接下來,尋找執行 EF Core 應用程式的 .NET 程序識別碼 (PID):
- 以滑鼠右鍵按一下工作列,選取「工作管理員」開啟 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
計數器及其意義
| 計數器名稱 | 描述 |
|---|---|
作用中 DbContextsactive-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。 |
| Queries ( total-queries 和 queries-per-second) |
查詢的執行次數。 |
查詢快取命中率 (%)compiled-query-cache-hit-rate
|
查詢快取記憶體命中與未命中次數的比例。 特定 LINQ 查詢初次由 EF Core 執行時 (不包括參數),它必然在相對繁重的程序中編譯。 在一般應用程式中,所有查詢都會重複使用,且在經過初始的熱身期間過後,查詢快取命中率應會穩定維持在 100%。 如果這個數字隨著時間的推移小於 100%,可能會因重複編譯而導致效能下降,這可能是動態查詢產生不理想的結果。 |
| 儲存變更 ( total-save-changes 和 save-changes-per-second) |
SaveChanges 的呼叫次數。 請注意,SaveChanges 會在單一批次中儲存多次變更,因此此數字不一定代表對單一實體執行的每項個別更新。 |