事件計數器
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):
- 以滑鼠右鍵按一下工作列,然後選取 [工作管理員],以開啟 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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應