共用方式為


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_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):

  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 實例。
執行策略作業失敗
total-execution-strategy-operation-failuresexecution-strategy-operation-failures-per-second
資料庫作業無法執行的次數。 如果已啟用重試執行策略,這會在相同作業的多次嘗試內包含每個個別失敗。 這可用來偵測基礎結構的暫時性問題。
開放式並行失敗
total-optimistic-concurrency-failuresoptimistic-concurrency-failures-per-second
因為開放式並行存取錯誤而失敗的次數 SaveChanges ,因為數據存放區中的數據自程式代碼載入後已變更。 這會對應至 DbUpdateConcurrencyException 所擲回的 。
查詢
total-queriesqueries-per-second
執行的查詢數目。
查詢快取命中率 ≦
compiled-query-cache-hit-rate
查詢快取叫用與遺漏的比例。 第一次由 EF Core 執行指定的 LINQ 查詢時(不包括參數),它必須在相對繁重的程式中編譯。 在一般應用程式中,會重複使用所有查詢,而且在初始熱身期間之後,查詢快取命中率應穩定在 100%。 如果這個數位在一段時間內小於 100%,您可能會因為重複編譯而經歷效能降低,這可能是產生次佳動態查詢的結果。
SaveChanges
total-save-changessave-changes-per-second
已呼叫次數 SaveChanges 。 請注意,將 SaveChanges 多個變更儲存在單一批次中,因此這不一定代表在單一實體上完成的每個個別更新。

其他資源