本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EXPLAIN Amazon Redshift 查詢計畫的資料重新分佈
在聯結步驟期間,配量可能需要使用未存放在本機的資料,而網路傳輸 (運算節點之間的資料移動) 是最昂貴的查詢操作。
聯結的EXPLAIN輸出也會指定在叢集周圍移動資料的方法,以促進聯結。資料可以透過播送或重新配送來移動。
-
在播送中,來自聯結一端的資料值會從每個運算節點複製到每個其他運算節點,使得每個運算節點最終有完整的資料副本。
-
在重新配送中,參與的資料值是從其目前的配量傳送至新配量 (可能在不同的節點上)。資料一般會重新配送以符合參與聯結的其他資料表的散發索引鍵 (如果該散發索引鍵是其中一個聯結資料欄)。如果任何資料表都不具備其中一個聯結資料欄上的散發索引鍵,則會配送兩個資料表,或是將內部資料表播送至每個節點。
EXPLAIN 輸出也會參考內部和外部資料表。
-
首先掃描內部資料表,並出現在查詢計畫底部附近。內部資料表是用於探測建置資料表中相符資料列的資料表。通常,記憶體中保留的內部資料表是雜湊的來源資料表,如果可能,則是兩個聯結的較小資料表。
-
外部資料表是要比對內部資料表的資料列來源,通常從磁碟讀取。查詢最佳化工具會根據
ANALYZE命令最新執行的資料庫統計資料,選擇內部和外部資料表。查詢子FROM句中的資料表順序不會決定哪個資料表是內部資料表,哪個是外部資料表。
請在查詢計畫中使用下列屬性來識別資料將移動的方式,以輔助查詢:
-
DS_BCAST_INNER – 表示整個內部聯結資料表的副本正在廣播至所有運算節點。
-
DS_DIST_ALL_NONE – 不需要重新分佈,因為內部資料表已使用 分佈到每個節點
DISTSTYLE ALL。整個資料表位於每個運算節點上。 -
DS_DIST_NONE – 不需要重新分佈,因為對應的配量會共置在運算節點上。這是最有效率的選項,因為沒有網路傳輸。
-
DS_DIST_INNER – 表示已重新分配內部聯結資料表。如果內部資料表更小或不常更新,請考慮將該資料表變更為
DISTSTYLE ALL。 -
DS_DIST_OUTER – 表示已重新分配外部聯結資料表。如果外部資料表更小或不常更新,請考慮將該資料表變更為
DISTSTYLE ALL。 -
DS_DIST_ALL_INNER – 表示內部聯結資料表正在傳送至單一節點,因為聯結資料表使用
DISTSTYLE ALL。此聯結會在單一節點上執行,而且可能會很慢。 -
DS_DIST_BOTH – 表示聯結中的兩個資料表正在重新分發至所有節點。這是最差的可能選項。