事件計數器

Entity Framework Core (EF Core) 會公開連續數值計量,以提供您程式健康情況的良好指示。 這些計量可用於下列用途:

  • 在應用程式執行時即時追蹤一般資料庫負載
  • 公開可能導致效能降低的問題編碼做法
  • 追蹤並隔離異常程式列為

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 多個變更儲存在單一批次中,因此這不一定代表在單一實體上完成的每個個別更新。

其他資源