共用方式為


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

名稱 金融工具類型 單位 (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):

  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

計數器及其意義

計數器名稱 描述
Active DbContexts
},active-db-contexts
目前在應用程式中作用且未公開的 DbContext 執行個體數目。 如果這個數字持續成長,表示 DbContext 執行個體未經正確處置,因此您可能有所流失。 請注意,如果內容共用已啟用,此數字會包含目前未使用的集區 DbContext 執行個體。
Execution Strategy Operation Failures
(total-execution-strategy-operation-failuresexecution-strategy-operation-failures-per-second)
資料庫作業執行失敗的次數。 如果啟用重試執行策略,此數值也包括相同作業的多次嘗試中的每項個別失敗。 此數值可用來偵測基礎結構的暫時性問題。
Optimistic Concurrency Failures
(total-optimistic-concurrency-failuresoptimistic-concurrency-failures-per-second)
因為資料存放區中的資料從程式碼載入起已變更,造成開放式並行錯誤,因而造成 SaveChanges 失敗的次數。 這項失敗會對應系統擲回的 DbUpdateConcurrencyException
Queries
(total-queriesqueries-per-second)
查詢的執行次數。
查詢快取命中率 (%)
},compiled-query-cache-hit-rate
查詢快取的命中與未命中比例。 特定 LINQ 查詢初次由 EF Core 執行時 (不包括參數),它必然在相對繁重的程序中編譯。 在一般應用程式中,所有查詢都會重複使用,且在經過初始的熱身期間過後,查詢快取命中率應會穩定維持在 100%。 如果這個數字在一段時間後小於 100%,您可能是遇到重複編譯導致的效能衰退,這可能是動態查詢的產生欠佳的結果。
SaveChanges
(total-save-changessave-changes-per-second)
SaveChanges 的呼叫次數。 請注意,SaveChanges 會在單一批次中儲存多次變更,因此此數字不一定代表對單一實體執行的每項個別更新。

其他資源