Redshift 表在生產集群中佔用的磁碟空間呈指數級增長
生產集群詳細資訊:
- 節點類型 dc1.8xlarge
- 節點 25
- 每個節點 2.56TB SSD 儲存
測試集群詳細資訊:
- 節點類型 ds2.xlarge
- 節點 6
- 每個節點 2TB 硬碟儲存
當具有完全相同的 DDL 和編碼的同一張表被解除安裝並從生產集群複製到測試集群時,其磁碟佔用量呈指數級減少。這已經使用具有不同分佈樣式和排序鍵模式的多個表進行了測試。
例子:
Table A (No sort key, DISTSYLE EVEN) - Size in production: 60GB; Size in test: 0.6 GB
Table B (Sort key, DISTSTYLE KEY) - Size in production: 96GB 100% sorted; Size in test: 1.4 GB 100% sorted
有什麼想法會導致這種差異嗎?我已經閱讀了大多數 redshift 論壇,但無法找到此問題的原因。我正在使用管理視圖 v_space_used_per_tbl(由 AWS 提供)來計算表的大小。
在 AWS 文件中找到了這一點,該文件清楚地描述了這種行為。
分配給位於不同集群上的兩個表的預設磁碟儲存空間量可能會有很大差異,即使這些表是使用相同的數據定義語言 (DDL) 語句創建並包含相同的行數時也是如此。
由於 RedShift 中的塊大小為 1MB,因此所有列每列至少佔用 1MB。最重要的是,如果 DISTSTYLE 是 EVEN,它將更接近數據庫中每個切片一個塊。由於無法在 RedShift 中調整塊大小,因此無法減小空表的大小,因為表的大小遵循以下公式:
- 對於使用 KEY 或 EVEN 分佈樣式創建的表:
最小表大小 = block_size (1MB) * (number_of_user_columns + 3 個系統列) * number_of_populated_slices * number_of_table_segments。
- 對於使用 ALL 分佈樣式創建的表:
最小表大小 = block_size (1MB) * (number_of_user_columns + 3 個系統列) * number_of_cluster_nodes * number_of_table_segments
https://aws.amazon.com/premiumsupport/knowledge-center/redshift-cluster-storage-space/