共用方式為


Fabric Data Warehouse 中的查詢洞察

適用於:✅ Microsoft Fabric 中的 SQL 分析端點和倉儲

在 Microsoft Fabric 中,查詢深入解析功能是可調整且可擴充的永續解決方案,可增強 SQL 分析體驗。 透過歷程記錄查詢資料、彙總的深入解析以及對實際查詢文字的存取,您可以分析和微調查詢效能。 QI 僅提供有關在使用者內容中執行的查詢的資訊,系統查詢不予考慮。

查詢深入解析功能提供 30 天的歷程記錄查詢資料和可採取動作的深入解析的中央位置,可協助您做出明智的決策,進而增強倉儲或 SQL 分析端點的效能。 當 SQL 查詢在 Microsoft Fabric 中執行時,查詢深入解析功能會收集與合併其執行資料,進而為您提供有價值的資訊。 您可以檢視管理員、成員和參與者角色的完整查詢文字。

  • 歷史查詢資料: Query Insights 儲存查詢執行的歷史資料,讓您能追蹤隨時間的效能變化。 系統查詢不會儲存在查詢深入解析中。
  • 綜合見解: 查詢洞察將查詢執行資料彙整成更具可操作性的洞察,例如辨識長期執行的查詢或最活躍的使用者。 這些匯總是以查詢圖形為基礎。 如需詳細資訊,請參閱 如何匯總類似的查詢來產生深入解析?
  • 倉庫洞察: 要了解倉庫整體健康狀況,請使用視 sql_pool_insights 圖。 此檢視提供池層級指標與壓力指標,幫助您監控資源分配並診斷各池間的效能問題。

開始之前

您應有權以參與者或更高權限存取 Premium 容量工作區內的 SQL 分析端點倉儲

何時需要查詢深入解析?

查詢深入解析功能解決了與查詢效能和資料庫最佳化相關的數個問題和疑慮,包括:

查詢效能分析

  • 查詢的歷程記錄效能為何?
  • 是否有任何長時間執行的查詢需要注意?
  • 我們可以識別導致效能瓶頸的查詢嗎?
  • 我的查詢是否已使用快取?
  • 哪些查詢會耗用最多CPU?

查詢優化與調整

  • 哪些查詢經常執行,而且是否可以改善其效能?
  • 我們能辨識出失敗或被取消的查詢嗎?
  • 我們可以追蹤一段時間的查詢效能變更嗎?
  • 是否有任何查詢持續執行效能不佳?

使用者活動監控

  • 誰提交了特定查詢?
  • 誰是最活躍的使用者,或執行查詢時間最長的使用者?

SQL 池與資源監控

  • 我的 SQL 池在查詢執行時是否承受壓力?
  • 過去24小時內,泳池有多頻繁地承受過壓力?
  • 最近有關於工作空間容量或池組設定的變動嗎?
  • 哪些資源池消耗的資源比例最高?
  • 我可以將壓力事件與緩慢的查詢關聯起來嗎?
  • 我該如何辨識水池水壓隨時間的趨勢?

以下系統觀點提供了這些問題的答案:

您可以在何處查看查詢深入解析?

自動產生的檢視位於 queryinsights倉儲中的 結構描述之下。 例如,在倉儲的 Fabric [總管] 中,在 [結構描述]、[查詢資訊]、[查詢深入解析]、[檢視] 底下尋找查詢深入解析檢視。

Fabric 總管的螢幕擷取畫面,其中顯示在 [結構描述]、[查詢深入解析]、[檢視] 底下尋找查詢深入解析檢視的位置。

查詢完成執行之後,您會在連線到的倉儲或 SQL 分析端點的 queryinsights 檢視中看到其執行資料。 如果您在 的內容中執行WH_2,您的查詢會出現在 WH_2 的查詢深入解析中。 根據執行的並行工作負載而定,已完成的查詢最多可能需要 15 分鐘才會出現在查詢深入解析中。 查詢出現在查詢深入解析中所需的時間,會隨著執行並行查詢的增加而增加。

如何彙總類似的查詢來產生深入解析?

如果查詢的形狀相同,即使謂詞不同,查詢也會被 Query Insights 視為相同。

您可以使用檢視中的 query hash 資料行來分析類似的查詢,並向下切入至每個執行。

例如,在參數化述詞之後,下列查詢會視為相同:

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

SELECT * FROM Orders
WHERE OrderDate BETWEEN '2000-07-01' AND '2006-07-31';

範例

識別您在過去 30 分鐘內執行的查詢

下列查詢會使用 queryinsights.exec_requests_history 和內建 USER_NAME() 函式,且其會傳回您目前的工作階段使用者名稱。

SELECT * FROM queryinsights.exec_requests_history 
WHERE start_time >= DATEADD(MINUTE, -30, GETUTCDATE())
AND login_name = USER_NAME();

依 CPU 時間識別最耗用 CPU 的查詢

下列查詢會依配置的CPU時間傳回前100個查詢。

SELECT TOP 100 distributed_statement_id, query_hash, allocated_cpu_time_ms, label, command
FROM queryinsights.exec_requests_history
ORDER BY allocated_cpu_time_ms DESC;

識別哪些查詢正在從遠端掃描大部分的數據,而不是快取

您可以判斷查詢執行期間大型數據掃描是否減緩查詢速度,並做出相應調整查詢程式碼的決策。 此分析可讓您比較不同的查詢執行,並識別掃描的數據量差異是否為效能變更的原因。

此外,您可以藉由檢查 和的總和data_scanned_memory_mbdata_scanned_disk_mb來評估快取的使用,並將它與data_scanned_remote_storage_mb過去執行的比較。

注意

掃描的數據值可能不會考慮查詢執行中繼階段期間移動的數據。 在某些情況下,移動的資料大小及處理所需的 CPU 可能比掃描資料的數值還要大。

掃描的值會作為0COPY INTO語句中出現。

SELECT distributed_statement_id, query_hash, data_scanned_remote_storage_mb, data_scanned_memory_mb, data_scanned_disk_mb, label, command
FROM queryinsights.exec_requests_history
ORDER BY data_scanned_remote_storage_mb DESC;

使用查詢文字中的 substring 識別最常執行的查詢

下列查詢會傳回符合特定字串的最新查詢,且會依成功執行次數遞減排序。

SELECT * FROM queryinsights.frequently_run_queries
WHERE last_run_command LIKE '%<some_label>%'
ORDER BY number_of_successful_runs DESC;

使用查詢文字中的 substring 識別執行時間長的查詢

下列查詢會傳回符合特定字串的查詢,且會依查詢執行時間中位值遞減排序。

SELECT * FROM queryinsights.long_running_queries
WHERE last_run_command LIKE '%<some_label>%'
ORDER BY median_total_elapsed_time_ms DESC;

查詢洞察視圖