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_hit_rate
microsoft.entityframeworkcore.execution_strategy_operation_failures
microsoft.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_hit_rate
名稱 | 金融工具類型 | 單位 (UCUM) | 描述 |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_hit_rate |
ObservableGauge | % |
已編譯查詢快取的命中率 - 自上次觀察以來。 |
從 開始提供: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 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
計數器及其意義
計數器名稱 | 描述 |
---|---|
Active 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 ) |
查詢快取叫用與遺漏的比例。 第一次由 EF Core 執行指定的 LINQ 查詢時(不包括參數),它必須在相對繁重的程式中編譯。 在一般應用程式中,會重複使用所有查詢,而且在初始熱身期間之後,查詢快取命中率應穩定在 100%。 如果這個數位在一段時間內小於 100%,您可能會因為重複編譯而經歷效能降低,這可能是產生次佳動態查詢的結果。 |
SaveChanges ( total-save-changes 和 save-changes-per-second ) |
已呼叫次數 SaveChanges 。 請注意,將 SaveChanges 多個變更儲存在單一批次中,因此這不一定代表在單一實體上完成的每個個別更新。 |
其他資源
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應