共用方式為


Fabric 資料倉儲中的統計資料

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

Microsoft Fabric 中的倉儲使用查詢引擎為指定的 SQL 查詢建立執行計畫。 當您提交查詢時,查詢最佳化工具會嘗試列舉所有可能的計畫,並選擇最有效率的候選計畫。 為了確定哪個計畫需要最少負荷 (I/O、CPU、記憶體),引擎需要能夠評估每個運算子可以處理的工作量或資料列數。 然後,根據每個計畫的成本,它會選擇估計工作量最少的計畫。 統計資料是包含資料相關資訊的物件,可讓查詢最佳化工具估計這些成本。

如何使用統計數據

若要達到最佳查詢效能,請務必具有準確的統計資料。 Microsoft Fabric 目前支援下列路徑,來提供相關且最新的統計資料:

所有資料表的手動統計資料

Microsoft Fabric 中提供了維護統計資料健康情況的傳統選項。 使用者可以分別使用 CREATE STATISTICSUPDATE STATISTICSDROP STATISTICS 來建立、更新和 卸除長條圖型單一資料行統計資料。 使用者也可以使用 DBCC SHOW_STATISTICS 來檢視長條圖型單一資料行統計資料的內容。 目前支援這些陳述式的有限版本。

  • 如果手動建立統計數據,請考慮將焦點放在查詢工作負載中大量使用的數據行(特別是在 GROUP BYs、ORDER BYs、篩選和 JON 中)。
  • 請考慮在資料變更之後定期更新資料行層級統計資料,以大幅變更資料列計數或散發資料。

手動統計資料維護的範例

若要根據資料行 CustomerKey 中的所有資料列,在 dbo.DimCustomer 資料表上建立統計資料,請執行以下操作:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

若要手動更新統計資料物件 DimCustomer_CustomerKey_FullScan (可能在大型資料更新之後),請執行以下操作:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

若要顯示有關統計資料物件的資訊,請執行以下操作:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

若要僅顯示有關統計資料物件長條圖的資訊,請執行以下操作:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

若要手動卸除統計資料物件 DimCustomer_CustomerKey_FullScan,請執行以下操作:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

下列 T-SQL 物件也可以用來檢查在 Microsoft Fabric 中手動建立的和自動建立的統計資料:

查詢時的自動統計資料

每當發出查詢和查詢優化器需要統計數據以進行計劃探索時,Microsoft Fabric 會在這些統計數據不存在時自動建立這些統計數據。 建立統計資料之後,查詢最佳化工具就可以利用這些統計資料來估計觸發查詢的計畫成本。 此外,如果查詢引擎判斷與查詢相關的現有統計數據不再準確地反映數據,則會自動重新整理這些統計數據。 由於這些自動作業是同步完成的,因此如果所需的統計資料尚不存在或自上次統計資料重新整理以來發生了重大資料變更,則您可以預期查詢持續時間包括該時間。

在查詢時間確認自動統計資料

在多種情況下,您都可以預期某種類型的自動統計資料。 最常見的是長條圖型統計資料,查詢最佳化工具針對 GROUP BY、JOIN、DISTINCT 子句、篩選器 (WHERE 子句) 和 ORDER BY 中參考的資料行要求這些統計資料。 例如,如果您要查看這些統計資料的自動建立,則在 COLUMN_NAME 的統計資料尚不存在的情況下,查詢將觸發建立。 例如:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

在此情況下,您應預期已建立 COLUMN_NAME 的統計資料。 如果資料行也是 varchar 資料行,您也會看到建立的平均資料行長度統計資料。 如果要驗證已自動建立統計資料,您可以執行下列查詢:

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
LEFT JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
LEFT JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

現在,您可以找到自動產生的長條圖統計資料的 statistics_name (應類似於 _WA_Sys_00000007_3B75D760),並執行下列 T-SQL:

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

例如:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

DBCC SHOW_STATISTICS 結果集中的 Updated 值應是與執行原始 GROUP BY 查詢時類似的日期 (UTC)。

然後,查詢引擎可以在後續查詢中利用這些自動產生的統計資料,來改善計畫成本計算和執行效率。 如果資料表中進行足夠的變更,查詢引擎也會重新整理這些統計資料,以改善查詢最佳化。 在對資料表進行大幅變更後,可以套用先前的相同範例練習。 在 Fabric 中,SQL 查詢引擎會使用與 SQL Server 2016 (13.x) 相同的重新編譯閾值來重新整理統計資料。

自動產生的統計資料類型

在 Microsoft Fabric 中,引擎會自動產生多種類型的統計資料,以改善查詢計畫。 目前,您可以在 sys.stats 中找到這些統計資料,但並非所有統計資料都可以採取動作:

  • 長條圖統計資料
    • 針對在查詢時需要長條圖統計資料的每個資料行建立
    • 這些物件包含有關特定資料行的散發的長條圖和密度資訊。 類似於在 Azure Synapse Analytics 專用集區中查詢時自動建立的統計資料。
    • 名稱以 _WA_Sys_ 開頭。
    • 您可以使用 DBCC SHOW_STATISTICS 檢視內容
  • 平均資料行長度統計資料
    • 針對大於 100 且在查詢時需要平均資料行長度的可變字元資料行 (varchar) 建立。
    • 這些物件包含一個值,表示建立統計資料時 varchar 資料行的平均資料列大小。
    • 名稱以 ACE-AverageColumnLength_ 開頭。
    • 使用者無法檢視且無法操作內容。
  • 資料表型基數統計資料
    • 針對在查詢時需要基數估計的每個資料表建立。
    • 這些物件包含資料表的資料列計數的估計值。
    • 名為 ACE-Cardinality
    • 使用者無法檢視且無法操作內容。

限制

  • 只能手動建立和修改單一資料行長條圖統計資料。
  • 不支援建立多重資料行統計資料。
  • 除了手動建立的統計資料和自動建立的統計資料之外,其他統計資料物件可能會出現在 sys.stats 中。 這些物件不會用於查詢最佳化。