跳至内容

在数据Copy期间,Redshift的存储空间被耗尽

0

【以下的问题经过翻译处理】 客户在S3上有5000个parquet/snappy文件,总大小为500GB,copy命令在运行9小时后报错,因为为了这张表Redshift的已经用尽了5TB的存储空间。数据分布方式没有指定,因此默认会用auto的方式来定义分布方式,而由于该表很大,所以最终应该会启用even分布。Redshift是不是先将所有数据解压缩到存储空间上后再应用编码?我无法想象为什么10倍的存储被耗尽。

专家
已提问 2 年前35 查看次数
1 回答
0

【以下的回答经过翻译处理】 是的,这是有可能的。 简要来说,使用DISTSTYLE ALL(比如AUTO方式的初始阶段),Redshift需要在每个节点的第一个片上(而不是所有片上)复制表的副本。如果你有2个节点,空间将是2倍,以此类推。是的,在COPY过程中,所有数据文件都需要解压缩,列需要进行编码/压缩(使用临时空间),并且经常需要排序(更多的临时空间)才能写入磁盘。假设Parquet/Snappy的压缩比率为3,这是一个额外的3倍因子,以此类推。

记住一个关键指标很有用:单个Redshift片可以轻松地每秒加载>5MB/秒/片或18 GB / 秒/片(无论节点类型如何)。数据大小是原始的!对于具有16片的大节点类型,您应该至少期望每个节点200 GB。如果您的COPY时间明显变长(比预期的长),这表明发生了一些错误(例如空间问题)。下面是一个有用的查询,可以帮助你排除“磁盘已满”的问题:

select '2000-01-01'::timestamp + (currenttime/1000000.0)* interval '1 second' as currenttime,node_num,query_id,temp_blocks from pg_catalog.stl_disk_full_diag;

建议: 1.将DISTSTYLE更改为EVEN或KEY(如果可以找到一个好的DISTKEY)。从EVEN开始也可以。 2.先将一小组文件加载到目标表中。目的是获得更好的snappy压缩和性能。 3.为了加快速度,使用更大的集群(经典调整大小)。另一个更快的选项是将您的集群弹性调整为2倍大小。当Copy结束后,验证完数据,再使用弹性调整回到原来的大小。

专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。