Redshift表在生产群集中占用指数级的磁盘空间

时间:2017-07-26 05:53:32

标签: amazon-redshift

生产群集详细信息:

  • 节点类型dc1.8xlarge
  • 节点25
  • 每个节点2.56TB SSD存储

测试群集详细信息:

  • 节点类型ds2.xlarge
  • 节点6
  • 每个节点2TB HDD存储

当相同的表具有完全相同的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论坛,但无法找到解决此问题的原因。我使用admin视图v_space_used_per_tbl(由AWS提供)来计算表的大小。

1 个答案:

答案 0 :(得分:2)

如果表行数很小,则表大小由群集的最小表大小定义。

Redshift在群集中每个切片的每列最少分配1MB。 dc1.8xlarge节点有32个切片,因此在25个节点的群集上,每列约800MB。

一个60GB的最小大小表有~72个用户列加上3个内部[如果某些列很大,则为VARCHAR() ]。 ds2.xlarge节点有2个切片,因此在6节点集群上,72列表的最小大小为~900MB。

特别是对于大型集群,如果表是“维度”表(小型查找表),则应考虑使用DISTSTYLE ALL。这会将每个节点的最小大小减少到每列1MB。

有关详细说明,请参阅AWS知识库文章Why does a table in my Amazon Redshift cluster consume more disk storage space than expected?