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_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 執行個體數量。 |
從以下版本起開始提供: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 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 執行個體。 |
Execution Strategy Operation Failures ( total-execution-strategy-operation-failures 和 execution-strategy-operation-failures-per-second ) |
資料庫作業執行失敗的次數。 如果啟用重試執行策略,此數值也包括相同作業的多次嘗試中的每項個別失敗。 此數值可用來偵測基礎結構的暫時性問題。 |
Optimistic Concurrency Failures ( 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%,您可能是遇到重複編譯導致的效能衰退,這可能是動態查詢的產生欠佳的結果。 |
SaveChanges ( total-save-changes 和 save-changes-per-second ) |
SaveChanges 的呼叫次數。 請注意,SaveChanges 會在單一批次中儲存多次變更,因此此數字不一定代表對單一實體執行的每項個別更新。 |