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

Posted

技术标签:

【中文标题】Redshift 表在生产集群中占用的磁盘空间呈指数增长【英文标题】:Redshift table occupies exponentially more disk space in production cluster 【发布时间】:2017-07-26 05:53:32 【问题描述】:

生产集群详情:

节点类型 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 提供)来计算表的大小。

【问题讨论】:

拜托not crosspost(这个问题更适合dba.stackexchange.com) 【参考方案1】:

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

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?

【讨论】:

以上是关于Redshift 表在生产集群中占用的磁盘空间呈指数增长的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 HSQLDB 表在磁盘上占用了太多空间?

揪出占用磁盘空间的罪魁祸首-企业生产实战

Amazon Redshift 表块分配

换种思路解决日志占用磁盘空间问题

添加 2 个节点后,Redshift 免费存储不会增加

查看数据库占用磁盘空间的方法