Fabric 資料倉儲中的查詢深入解析
適用於:✅ Microsoft Fabric 中的 SQL 分析端點和倉儲
在 Microsoft Fabric 中,查詢深入解析功能是可調整且可擴充的永續解決方案,可增強 SQL 分析體驗。 透過歷程記錄查詢資料、彙總的深入解析以及對實際查詢文字的存取,您可以分析和微調查詢效能。 QI 僅提供有關在使用者內容中執行的查詢的資訊,系統查詢不予考慮。
查詢深入解析功能提供 30 天的歷程記錄查詢資料和可採取動作的深入解析的中央位置,可協助您做出明智的決策,進而增強倉儲或 SQL 分析端點的效能。 當 SQL 查詢在 Microsoft Fabric 中執行時,查詢深入解析功能會收集與合併其執行資料,進而為您提供有價值的資訊。 您可以檢視管理員、成員和參與者角色的完整查詢文字。
- 歷程記錄查詢資料:查詢深入解析功能會儲存有關查詢執行的歷程記錄資料,讓您能夠追蹤一段時間的效能變更。 系統查詢不會儲存在查詢深入解析中。
- 彙總深入解析:查詢深入解析功能會將查詢執行資料彙總成可操作性更強的深入解析,例如識別執行時間長的查詢或大部分的作用中使用者。 這些匯總是以查詢圖形為基礎。 如需詳細資訊,請參閱 如何匯總類似的查詢來產生深入解析?
開始之前
您應有權以參與者或更高權限存取 Premium 容量工作區內的 SQL 分析端點或倉儲。
何時需要查詢深入解析?
查詢深入解析功能解決了與查詢效能和資料庫最佳化相關的數個問題和疑慮,包括:
查詢效能分析
- 查詢的歷程記錄效能為何?
- 是否有任何長時間執行的查詢需要注意?
- 我們可以識別導致效能瓶頸的查詢嗎?
- 我的查詢是否已使用快取?
- 哪些查詢會耗用最多CPU?
查詢最佳化和微調
- 哪些查詢經常執行,而且是否可以改善其效能?
- 我們可以識別失敗或已取消的查詢嗎?
- 我們可以追蹤一段時間的查詢效能變更嗎?
- 是否有任何查詢持續執行效能不佳?
使用者活動監視
- 誰提交了特定查詢?
- 誰是最活躍的使用者,或執行查詢時間最長的使用者?
有三個系統檢視可提供針對這些問題的解答:
queryinsights.exec_requests_history (Transact-SQL)
- 傳回每個已完成 SQL 要求/查詢的相關資訊。
queryinsights.exec_sessions_history (Transact-SQL)
- 傳回經常執行查詢的相關資訊。
queryinsights.long_running_queries (Transact-SQL)
- 依查詢執行時間傳回查詢的相關資訊。
queryinsights.frequently_run_queries (Transact-SQL)
- 傳回經常執行查詢的相關資訊。
您可以在何處查看查詢深入解析?
自動產生的檢視位於 SQL 分析端點和倉儲中的 queryinsights
結構描述之下。 例如,在倉儲的 Fabric [總管] 中,在 [結構描述]、[查詢資訊]、[查詢深入解析]、[檢視] 底下尋找查詢深入解析檢視。
查詢完成執行之後,您會在連線到的倉儲或 SQL 分析端點的 queryinsights
檢視中看到其執行資料。 如果您在 WH_2
的內容中執行跨資料庫查詢,您的查詢會出現在 WH_2
的查詢深入解析中。 根據執行的並行工作負載而定,已完成的查詢最多可能需要 15 分鐘才會出現在查詢深入解析中。 查詢出現在查詢深入解析中所需的時間,會隨著執行並行查詢的增加而增加。
如何彙總類似的查詢來產生深入解析?
如果查詢具有相同的形狀,則查詢深入解析會將查詢視為相同,即使述詞可能不同也是如此。
您可以使用檢視中的 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_mb
data_scanned_disk_mb
來評估快取的使用,並將它與data_scanned_remote_storage_mb
過去執行的比較。
注意
掃描的數據值可能不會考慮查詢執行中繼階段期間移動的數據。 在某些情況下,移動的數據大小和處理所需的 CPU 可能會大於數據掃描值所指出的大小。
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;