【发布时间】:2017-01-15 23:05:12
【问题描述】:
我在美国西部使用 ds2.xlarge Redshift 集群,数据量约为 1TB。我正在尝试将 50GB 表卸载到同一区域中的 S3 存储桶,如下所示:
UNLOAD ('select * from table_name') TO 's3://bucket/folder_name/'
CREDENTIALS 'aws_access_key_id=foo;aws_secret_access_key=bar'
MANIFEST;
此查询大约需要 1 小时才能运行。这似乎令人惊讶,因为亚马逊网站说我们的集群将有 0.5GB/s 的 I/O,这意味着将 50GB 的表上传到 S3 需要不到 2 分钟,而不是一个小时。 (比宣传的慢 20-30 倍)
有没有其他人遇到过这个问题和/或找到了修复/解决方法?如果我们决定使用 Redshift,我们每天需要将大约 200GB 的数据从 Redshift 转移到 S3。
【问题讨论】:
-
集群中只有一个节点吗?表中有多少行和列?如果你做的数量较少(例如
select * from table_name limit 10000),它完成得更快吗?只是出于兴趣,哪里提到集群的 0.5GB/s? -
这里提到了I/O:aws.amazon.com/blogs/aws/…我相信该表大约有80M行和10-20列。有限制的话会快很多
-
我怀疑I/O列是数据库访问磁盘存储的速度,不一定是导出到Amazon S3的速度。导出完成速度更快且行更少的事实表明它与数据量有关。您可以尝试使用工作负载管理 (WLM) 为进程授予插槽(从而获得更多内存)。见:
wlm_query_slot_count -
另一个加快卸载速度的选项是压缩数据 (gzip / bzip2)。移动位需要花费大量时间,尤其是当存储桶与 Redshift 不在同一区域时。 docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html
-
添加
PARELLEL TRUE应该有助于提高性能,因为它会根据集群中的片数写入多个文件。默认情况下,Redshift 不使用此选项。
标签: amazon-web-services amazon-s3 amazon-redshift