Sql-Server
PolyBase 如何從外部表中收集統計資訊?
線上書籍對 PolyBase 中的查詢優化有這樣的說法:
查詢優化器做出基於成本的決定,將計算推送到 Hadoop,這樣做會提高查詢性能。**它使用外部表的統計資訊來做出基於成本的決策。**推送計算創建 MapReduce 作業並利用 Hadoop 的分佈式計算資源。
我的問題 - 優化器如何以及何時收集這些統計資訊?
在 SQL Server 關係引擎內部,可以隱式或顯式創建統計資訊,它們會隨著寫入的發生而老化,並且可以顯式刷新或在表維護期間刷新。PolyBase 中是否採用了類似的策略?
鑑於數據可能會被載入到 Hadoop/Azure blob 中而 SQL Server 沒有看到它,並且數據量將很大(很可能)通過採樣或類似方法創建執行時臨時統計數據對我來說似乎不太可能。
PolyBase 統計數據的創建和維護由 DBA 負責。
“入門”指南提供了建立 PolyBase 的幾個步驟,最後一個是 CREATE STATISTICS 引用外部表。
有關 CREATE STATISTICS的文件指出:
外部表的統計資訊
創建外部表統計資訊時,SQL Server 將外部表導入到臨時 SQL Server 表中,然後創建統計資訊。對於樣本統計資訊,僅導入樣本行。如果你有一個大的外部表,使用預設採樣而不是全掃描選項會快得多。
再往下
限制和限制
外部表不支持更新統計資訊。要更新外部表的統計資訊,請刪除並重新創建統計資訊。
由此我得出結論,由系統管理員決定
- 為預期的工作負載創建適當的統計數據
- 監控陳舊的統計數據
- 實施外部統計的維護程序
- 確保“臨時表”(TempDB?)有足夠的空間
可以想像,隨著產品的成熟和獲得牽引力,目前數據引擎的更多功能(自動創建和自動更新統計)將被移植到 PolyBase。另一方面,您真的想在對 5PB 商店進行採樣時等待結果嗎?