EXPLAIN Amazon Redshift 查詢計畫的資料重新分佈 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 – 表示聯結中的兩個資料表正在重新分發至所有節點。這是最差的可能選項。