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 表在生产集群中占用的磁盘空间呈指数增长的主要内容,如果未能解决你的问题,请参考以下文章